¿Por qué `object .__ init__` no toma argumentos
Porque noobject.__init__
tomar*args, **kwargs
como argumentos? Esto rompe algunos códigos simples de una manera muy molesta, sin ninguna ventaja, por lo que puedo ver:
Digamos que queremos asegurarnos de que todos__init__
De todas las clases parentales se llaman. Siempre y cuando cada inicio siga la simple convención de llamar.super().__init__
esto garantizará que se ejecute toda la jerarquía y que se realizará una sola vez (también sin tener que especificar específicamente el padre). El problema aparece cuando pasamos argumentos a lo largo:
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")
¿Cuál es el razonamiento para esto y cuál es la mejor solución general (! Es fácil de resolver en mi caso específico pero que se basa en un conocimiento adicional de la jerarquía) solución temporal? Lo mejor que puedo ver es comprobar si el padre es un objeto y, en ese caso, no darle ningún argumento ... horriblemente feo.