在Python中的大多数类型/类中,我可以不带参数调用.mro()
。但不是type
及其后代:
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()
?
答案 0 :(得分:5)
因为mro
是元类的一个方法,它需要一个实例 - 即一个类 - ,就像给出一个普通的类C
和一个方法m
一样,你可以致电C.m(inst)
或inst.m()
,但您无法致电C.m()
,因为它需要self
参数。
如果您想使用元类或mro
本身来呼叫type
,可以使用type.mro(type)
。