Ho un metaclasse:metaclasse errore: Tipo .__ init __() prende 1 o 3 argomenti
class MyMeta(type):
def __init__(cls, name, bases, dct):
# Do something
...
return super(MyMeta, cls).__init__(cls, name, bases, dct)
e una classe:
class MyClass(object):
__metaclass__ = MyMeta
Quando uso questi ottengo il seguente errore:
E TypeError: Error when calling the metaclass bases
E type.__init__() takes 1 or 3 arguments
Qual è il problema, e perché type.__init__()
prende un numero di argomenti esattamente variabile?
Nota che 'super (MyMeta, cls) .__ init __ (name, bases, dct)' è il modo * corretto * di farlo, anche in 2.5 (e fino a 2.2). L'unico caso in cui passare 'cls' come primo argomento con' __new__', non con '__init__' (e non è specifico per' type' o metaclass.) Ciò che è cambiato è che 'type .__ init __()' ha smesso di ingoiare le eccezioni, molto simile 'oggetto .__ init __()'. –
@ julio.alegria http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/ –
@HarleyHolcombe So che è possibile rispondere alla tua domanda, ma ... 30 secondi? Significa che la risposta era pronta prima ancora di aver postato la domanda, che è piuttosto strano – juliomalegria