gpt4 book ai didi

python - 元类错误 : type. __init__() 需要 1 个或 3 个参数

转载 作者:太空狗 更新时间:2023-10-30 00:51:43 25 4
gpt4 key购买 nike

我有一个元类:

class MyMeta(type):
def __init__(cls, name, bases, dct):
# Do something
...

return super(MyMeta, cls).__init__(cls, name, bases, dct)

和一个类:

class MyClass(object):
__metaclass__ = MyMeta

当我使用这些时,出现以下错误:

TypeError: Error when calling the metaclass bases
type.__init__() takes 1 or 3 arguments

有什么问题,为什么 type.__init__() 需要精确可变数量的参数?

最佳答案

问题是在从 python 2.5 升级到 python 2.6 时,type.__init__() 已更改,因此您不再需要传入 cls。所以只需调用 super 即可:

return super(MyMeta, cls).__init__(name, bases, dct)

另一个解决方案是完全避免 super 调用并执行此操作(尽管它不太好):

return type.__init__(cls, name, bases, dct)

一切都会正常工作(在 python >= 2.6 中)。

关于为什么 type.__init__() 可以接受不同数量的参数,查看 the documentation .这样一来,除了将其用作构造函数外,您还可以调用 type(myobject),它将返回 myobject 的类型:

>>> number = 1
>>> type(number)
<type 'int'>
>>> type('my string')
<type 'str'>

参见 What is a metaclass in Python?有关元类和类型的更多信息。

关于python - 元类错误 : type. __init__() 需要 1 个或 3 个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9219883/

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