Python 为什么元类有一个类型?

Python 为什么元类有一个类型?,python,oop,Python,Oop,我有一个小测试来完全理解python中的元类 class Test(object): pass print Test.__class__ print Test.__class__.__class__ print Test.__class__.__class__.__class__ 所有结果都是相同的类型。但是他们每个人的地址都不一样 我真的不明白为什么元类递归地拥有一个元类。 请解释一下?当您进行测试时,类将返回测试的类型,即类型(因为测试是类标识符) 类型本身又是一个类标识符,因

我有一个小测试来完全理解python中的元类

class Test(object):
    pass


print Test.__class__
print Test.__class__.__class__
print Test.__class__.__class__.__class__
所有结果都是相同的
类型
。但是他们每个人的地址都不一样
我真的不明白为什么元类递归地拥有一个元类。

请解释一下?

当您进行
测试时,
类将返回
测试的类型,即
类型
(因为
测试
是类标识符)

类型
本身又是一个类标识符,因此您可以在其上调用
\uuuu class\uuuu
(从
对象
继承而来),您会发现它的类型也是
类型
,因为它是一个类标识符


因为您总是会返回
类型
,这是一个类本身,所以您可以无限次地执行此操作,并且总是会返回当前对象的类型是
类型

所有类都是类,这意味着它们是从名为class的类派生而来的…

实际上,地址是相同的:

>>> id(Test.__class__)
6384576
>>> id(Test.__class__.__class__)
6384576
>>> id(Test.__class__.__class__.__class__)
6384576
在Python中,一切都是一个对象,每个对象都必须有一个类(它应该属于某种类型)。您可以通过
属性访问该类/类型引用,例如:

>>> (1).__class__
<type 'int'>
同时
type'type'>
也是一个对象,应该引用某个类/类型。但由于这是一种特殊对象,其
\uuuuuu class\uuuuu
属性指的是它自己:

>>> (1).__class__.__class__.__class__ is (1).__class__.__class__
True

python的所有类对象都是由内置函数type()生成的。你也可以试试这个

>>> T.__class__ == type
True
>>> type(type)
<type 'type'>
>>>T.\uuuuu类\uuuuu==type
真的
>>>类型(类型)
T.等于内置函数类型,它也是实现调用函数的对象。它是一个属性,将被解释为(T)。由于T类没有基类,因此使用type()返回类型对象

您可以查看python文档,了解有关类创建的详细信息

确定适当的元类

  • 如果没有给出基和显式元类,则使用type()
  • 如果给出了一个显式元类,但它不是type()的实例,则直接将其用作元类
  • 如果将type()的实例作为显式元类给出,或者定义了基,那么将使用最派生的元类

谢谢,我误解了他们的地址不一样。
>>> T.__class__ == type
True
>>> type(type)
<type 'type'>