Python 3中对象和类之间的关系

时间:2011-02-19 12:03:53

标签: python

我以为我意识到了这种关系:在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本身就是一个对象。我不明白这。我无法想象类是对象。

1 个答案:

答案 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类型没有矛盾。