Cela m'a mordu deux fois récemment (je sais que j'aurais dû apprendre de mon erreur la première fois) et la réponse acceptée ne m'a pas aidé non plus, alors même si c'est frais dans mon esprit, j'ai pensé que je soumettrais ma propre réponse au cas où quelqu'un d'autre se heurte à cela (ou j'en ai encore besoin à l'avenir).
Dans mon cas, le problème était que je passais un kwarg dans l'initialisation de la sous-classe, mais dans la superclasse, ce mot-clé arg était ensuite passé dans l'appel super ().
Je pense toujours que ces types de choses sont mieux avec un exemple:
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})
Donc, pour résoudre ce problème, j'ai juste besoin de modifier l'ordre dans lequel je fais les choses dans la méthode Foo .__ init__; par exemple:
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