8

在 Python 中的大多数类型/类上,我可以.mro()不带参数地调用。但不是 ontype及其后代:

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()像在其他地方一样直接打电话呢?

4

1 回答 1

8

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

如果要mro使用元类或type自身调用,可以使用type.mro(type).

于 2015-12-18T15:27:49.483 回答