我进行了一些测试以完全理解 python 中的元类。
class Test(object):
pass
print Test.__class__
print Test.__class__.__class__
print Test.__class__.__class__.__class__
所有的结果都是一样的type
。但是他们的每个地址都不一样
我真的不明白为什么元类递归地有一个元类。
请给我解释一下?
其实地址是一样的:
>>> id(Test.__class__)
6384576
>>> id(Test.__class__.__class__)
6384576
>>> id(Test.__class__.__class__.__class__)
6384576
Python 中的一切都是对象,每个对象都必须有一个类(它应该属于某种类型)。您可以按属性访问该类/类型引用__class__
,例如:
>>> (1).__class__
<type 'int'>
一切都包括类本身,这些类/类型称为type
:
>>> (1).__class__.__class__
<type 'type'>
同时type 'type'>
也是一个对象,应该引用一些类/类型。但由于这是一种特殊的对象,它的__class__
属性指的是它自己:
>>> (1).__class__.__class__.__class__ is (1).__class__.__class__
True
当你这样做时Test.__class__
,你会得到 的类型Test
,即type
(因为Test
是类标识符)。
type
它本身又是一个类标识符,所以你可以在它上面调用__class__
(继承自object
),然后你会再次发现它的类型是,type
因为它是一个类标识符。
因为您总是会返回type
一个类本身,所以您可以无限次执行此操作,并且总是会返回当前对象的类型是type
.
所有类都是类,这意味着它们派生自一个称为类的类...
所有 python 的类对象都是由内置函数 type() 构建的。你也可以试试这个。
>>> T.__class__ == type
True
>>> type(type)
<type 'type'>
T.类等于内置函数类型,它也是实现调用函数的对象。这是一个属性将被解释为类(T)。由于您的 T 类没有基类,因此使用 type() 它将返回类型对象。
您可以查看有关自定义类创建的 python 文档以获取有关类创建的详细信息。
确定适当的元类