我以为我意识到了这种关系:在Python中,一切都是对象,每个对象都有一个类型。那课怎么样?类是对象的蓝图,对象是类的实例。但我读过in an article,在Python中,类本身就是对象。我认为没有蓝图 - 它的类,对象就不可能存在。但是,如果类是一个对象,它是如何存在的?
type.__bases__ = (<class 'object'>,)
int.__bases__ = (<class 'object'>,)
str.__bases__ = (<class 'object'>,)
那么,类object
是每个对象的蓝图吗?
type(str) = <class ‘type’>
type(int) = <class ‘type’>
type(type) = <class ‘type’>
那么,类type
是否是其他所有类型的蓝图?
但是type
本身就是一个对象。我不明白这。我无法想象类是对象。
答案 0 :(得分:7)
在Python中可以赋予名称的所有东西都是一个对象 - 包括函数,类和元类。每个对象都有一个关联的类型或类(这两个名称是相同的 - “类型”和“类”在Python 3中是相同的)。类型本身又是一个对象,它本身就是一个相关的类型。类型的类型称为元类(当然,它同样可以称为元类型,但不使用后一个单词)。您可以使用type()
来确定对象的类型。如果迭代地查询对象的类型,类型的类型等等,通常在两个步骤之后总是会在某个时候以类型type
结束:
type(3) --> int
type(int) --> type
type(type) --> type
另一个例子,使用“meta-metaclasses”:
class A(type):
pass
class B(type, metaclass=A):
pass
class C(metaclass=B):
pass
c = C()
type(c) --> C
type(C) --> B
type(B) --> A
type(A) --> type
type(type) --> type
type
本身属于type
类型没有矛盾。