簡體   English   中英

元類錯誤:type .__ init __()需要1或3個參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM