当前位置:  开发笔记 > 编程语言 > 正文

为什么元类上的.mro()有不同的签名?'type'对象的'描述符'mro'需要一个参数`

如何解决《为什么元类上的.mro()有不同的签名?'type'对象的'描述符'mro'需要一个参数`》经验,为你挑选了1个好方法。

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



1> Pedro Wernec..:

因为mro是元类的方法,它需要一个实例-即一类- ,很像给一个普通的类C和方法m,你可以打电话C.m(inst)inst.m(),但你不能叫C.m(),因为它预计self的说法.

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

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有