gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:00:33 26 4
gpt4 key购买 nike

在 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() 直接像我在其他地方做的那样?

最佳答案

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

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

关于python - 为什么元类上的 .mro() 具有不同的签名? `descriptor ' 对象的 'type' mro' 需要一个参数`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34358767/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com