[英]metaclass error: type.__init__() takes 1 or 3 arguments
我有一個元類:
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__()
可以使用不同數量的參數,請查看文檔 。 它是這樣的,除了使用它作為構造函數,你可以調用type(myobject)
,它將返回myobject
的類型:
>>> number = 1
>>> type(number)
<type 'int'>
>>> type('my string')
<type 'str'>
請參閱Python中的元類是什么? 有關元類和類型的更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.