Por que o `object .__ init__` não recebe argumentos?
Por que nãoobject.__init__
leva*args, **kwargs
como argumentos? Isso quebra algum código simples de uma maneira altamente irritante, sem qualquer upside, tanto quanto eu posso ver:
Digamos que queremos ter certeza de que todos__init__
de todas as classes pai são chamadas. Enquanto cada init segue a convenção simples de chamarsuper().__init__
isso garantirá que toda a hierarquia seja executada e que seja exatamente uma vez (também sem precisar especificar especificamente o pai). O problema aparece quando passamos argumentos:
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")
Qual é o raciocínio para isso e qual é o melhor geral (é facilmente solucionável no meu caso específico, mas que depende de conhecimento adicional da hierarquia) solução alternativa? O melhor que posso ver é verificar se o pai é objeto e, nesse caso, não dar nenhum argumento ... horrivelmente feio.