在Python中的大多数类型/类中,我可以.mro()
不带参数调用.但不是type
和它的后代:
In [32]: type(4).mro() Out[32]: [int, object] In [33]: type(type(4)).mro() --------------------------------------------------------------------------- TypeError Traceback (most recent call last)in () ----> 1 type(type(4)).mro() TypeError: descriptor 'mro' of 'type' object needs an argument
看来我可以得到我想要的东西type(type(4)).mro(type(4))
,但为什么我不能mro()
像其他地方那样直接打电话?
因为mro
是元类的方法,它需要一个实例-即一类- ,很像给一个普通的类C
和方法m
,你可以打电话C.m(inst)
或inst.m()
,但你不能叫C.m()
,因为它预计self
的说法.
如果您想mro
使用元类或其type
自身进行调用,则可以使用type.mro(type)
.