Isso me incomodou duas vezes recentemente (sei que deveria ter aprendido com meu erro da primeira vez) e a resposta aceita não me ajudou em nenhuma das vezes, então, enquanto ainda está fresca em minha mente, pensei em enviar minha própria resposta para o caso Alguém mais está correndo para isso (ou eu preciso disso novamente no futuro).
No meu caso, o problema era que eu estava passando um kwarg para a inicialização da subclasse, mas na superclasse essa palavra-chave arg estava sendo passada para a chamada super ().
Sempre acho que esses tipos de coisas são melhores com um exemplo:
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})
Então, para resolver isso, eu só preciso alterar a ordem em que faço as coisas no método Foo .__ init__; por exemplo:
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