Mam metaklasa:metaklasa błąd: typ .__ startowych __() zajmuje 1 lub 3 argumenty
class MyMeta(type):
def __init__(cls, name, bases, dct):
# Do something
...
return super(MyMeta, cls).__init__(cls, name, bases, dct)
i klasę:
class MyClass(object):
__metaclass__ = MyMeta
Kiedy używać tych pojawia się następujący błąd:
E TypeError: Error when calling the metaclass bases
E type.__init__() takes 1 or 3 arguments
Na czym polega problem i dlaczego type.__init__()
przyjmuje dokładnie zmienną liczbę argumentów?
Zauważ, że 'super (MyMeta, cls) .__ init __ (name, bases, dct)' jest * poprawnym * sposobem na zrobienie tego, nawet w 2.5 (i aż do 2.2.) Jedyny przypadek, w którym Przekaż 'cls', ponieważ pierwszym argumentem jest' __new__', a nie '__init__' (i to nie jest specyficzne dla' type' lub metaclasses). Co zmieniło się, że 'type .__ init __()' przestał przełykać wyjątki, podobnie jak 'object .__ init __()'. –
@ julio.alegria http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/ –
@HarleyHolcombe Wiem, że odpowiedź na twoje pytanie jest dozwolona, ale ... 30 sekund? Oznacza to, że odpowiedź była gotowa jeszcze przed opublikowaniem pytania, to trochę dziwne. – juliomalegria