为什么“ int”的MRO中没有“ type”?

问题描述

根据我的理解,int.mro()的第二个元素应该是<class 'type'>,因为这是int.__class__的输出。但是int.mro()给出了[<class 'int'>,<class 'object'>]。如何实现?

解决方法

查看int.mro()会显示int类的继承树,而不是创建type类的int元类的继承树,因此为什么<class 'type'>不应位于int.mro()中。当元类创建类对象时,它还将生成__mro__

相反,__class__是对实例的 type 的引用,向您显示类实例所属的类。在这种情况下,int所属的类是元类type。因此,在大多数用例中,x.__class__type(x)相同。

您可以在以下示例中看到它们之间的关系:

print(int.__class__)
> <class 'type'>

print(int.mro())
> [<class 'int'>,<class 'object'>]

print(int.__class__.__mro__)
> [<class 'type'>,<class 'object'>]

print(int().__class__)
> <class 'int'>

此外,您可以在可以构造的类的最简单示例中看到这种关系:

class A:
    pass

obj = A()
   
print(A.mro())
> [<class '__main__.A'>,<class 'object'>]

print(A.__class__)
> <class 'type'>

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...