首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么"int“的MRO中没有"type”?

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

Stack Overflow用户
提问于 2020-08-25 05:56:22
回答 1查看 113关注 0票数 3

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-25 09:04:47

查看int.mro(),您将看到int类的继承树,而不是创建int类的type元类,因此<class 'type'>不应该在int.mro()中。当元类创建类对象时,它还构建__mro__

相反,__class__是对实例类型的引用,显示了类实例所属的类。在本例中,int所属的类是元类type。正是由于这个原因,在大多数用例中,x.__class__type(x)是相同的。

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

代码语言:javascript
复制
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'>

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

代码语言:javascript
复制
class A:
    pass

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

print(A.__class__)
> <class 'type'>
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63572818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档