Questo mi ha morso due volte di recente (so che avrei dovuto imparare dal mio errore la prima volta) e la risposta accettata non mi ha aiutato neanche la volta, quindi mentre è fresca nella mia mente ho pensato di inviare la mia risposta per ogni evenienza qualcun altro si sta imbattendo in questo (o ne ho bisogno di nuovo in futuro).
Nel mio caso il problema era che stavo passando un kwarg nell'inizializzazione della sottoclasse, ma nella superclasse quella parola chiave arg veniva poi passata nella chiamata super ().
Penso sempre che questi tipi di cose siano migliori con un esempio:
class Foo(object):
def __init__(self, required_param_1, *args, **kwargs):
super(Foo, self).__init__(*args, **kwargs)
self.required_param = required_param_1
self.some_named_optional_param = kwargs.pop('named_optional_param', None)
def some_other_method(self):
raise NotImplementedException
class Bar(Foo):
def some_other_method(self):
print('Do some magic')
Bar(42)
Bar(42, named_optional_param={'xyz': 123})
Quindi per risolvere questo problema ho solo bisogno di modificare l'ordine in cui faccio le cose nel metodo Foo .__ init__; per esempio:
class Foo(object):
def __init__(self, required_param_1, *args, **kwargs):
self.some_named_optional_param = kwargs.pop('named_optional_param', None)
super(Foo, self).__init__(*args, **kwargs)
self.required_param = required_param_1