これは最近2回私を噛みました(私は最初に私の間違いから学ぶべきだったと思います)そして受け入れられた答えはどちらの時間も私を助けませんでした他の誰かがこれに遭遇しています(または私は将来これを再び必要とします)。
私の場合、問題は、サブクラスの初期化にkwargを渡していたが、スーパークラスでは、そのキーワードargがsuper()呼び出しに渡されていたことでした。
私はいつもこれらのタイプのものが例で最も良いと思います:
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})
したがって、これを解決するには、Foo .__ init__メソッドで実行する順序を変更する必要があります。例えば:
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