首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么元类上的.mro()有不同的签名?‘类型’对象的‘描述符'mro’需要一个论证`

为什么元类上的.mro()有不同的签名?‘类型’对象的‘描述符'mro’需要一个论证`
EN

Stack Overflow用户
提问于 2015-12-18 15:20:13
回答 1查看 1.2K关注 0票数 8

在Python中的大多数类型/类上,我可以在没有参数的情况下调用.mro()。但在type及其后代身上却没有:

代码语言:javascript
运行
复制
In [32]: type(4).mro()
Out[32]: [int, object]

In [33]: type(type(4)).mro()
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-33-48a6f7fcd2fe> in <module>()
----> 1 type(type(4)).mro()

TypeError: descriptor 'mro' of 'type' object needs an argument

看起来我可以从type(type(4)).mro(type(4))中得到我想要的东西,但是为什么我不能像在其他地方那样直接调用mro()呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-18 15:27:49

因为mro是元类的一种方法,它需要一个实例--即一个类--就像给定一个普通类C和一个方法m,您可以调用C.m(inst)inst.m(),但是不能调用C.m(),因为它需要self参数。

如果您想使用元类或type本身调用type,则可以使用type.mro(type)

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34358767

复制
相关文章

相似问题

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