Esto me ha mordido dos veces recientemente (sé que debería haber aprendido de mi error la primera vez) y la respuesta aceptada no me ha ayudado en ninguna ocasión, así que aunque está fresca en mi mente, pensé que enviaría mi propia respuesta por si acaso. alguien más se está encontrando con esto (o lo necesito nuevamente en el futuro).
En mi caso, el problema era que estaba pasando un kwarg a la inicialización de la subclase, pero en la superclase esa palabra clave arg se pasaba a la llamada super ().
Siempre creo que este tipo de cosas son mejores con un ejemplo:
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})
Entonces, para resolver esto, solo necesito alterar el orden en que hago las cosas en el método Foo .__ init__; p.ej:
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