根据我的理解,int.mro()的第二个元素应该是<class 'type'>,因为它是int.__class__的输出。但是相反,int.mro()给了[<class 'int'>, <class 'object'>]。它是如何实施的?
发布于 2020-08-25 09:04:47
查看int.mro(),您将看到int类的继承树,而不是创建int类的type元类,因此<class 'type'>不应该在int.mro()中。当元类创建类对象时,它还构建__mro__。
相反,__class__是对实例类型的引用,显示了类实例所属的类。在本例中,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'>https://stackoverflow.com/questions/63572818
复制相似问题