Dlaczego `obiekt .__ init__` nie przyjmuje argumentów
Dlaczego nieobject.__init__
brać*args, **kwargs
jako argumenty? Łamie to jakiś prosty kod w bardzo irytujący sposób, bez żadnych poprawek, o ile widzę:
Powiedzmy, że chcemy się upewnić, że wszystko__init__
wywoływane są wszystkie klasy nadrzędne. Tak długo, jak każdy init postępuje zgodnie z prostą konwencją wywoływaniasuper().__init__
zagwarantuje to, że cała hierarchia zostanie uruchomiona i to dokładnie raz (również bez konieczności podawania konkretnie rodzica). Problem pojawia się, gdy przekazujemy argumenty:
class Foo:
def __init__(self, *args, **kwargs):
print("foo-init")
super().__init__(*args, **kwargs) # error if there are arguments!
class Bar:
def __init__(self, *args, **kwargs):
print("bar-init")
super().__init__(*args, **kwargs)
class Baz(Bar, Foo):
def __init__(self, *args, **kwargs):
print("baz-init")
super().__init__(*args, **kwargs)
b1 = Baz() # works
b2 = Baz("error")
Jakie jest tego uzasadnienie i jaki jest najlepszy ogólny (! Łatwo go rozwiązać w moim konkretnym przypadku, ale opiera się na dodatkowej znajomości hierarchii) obejście? Najlepsze, co mogę zobaczyć, to sprawdzenie, czy rodzic jest obiektem iw takim przypadku nie podawaj mu żadnych argumentów.