이것은 최근에 두 번 저를 물었습니다 (처음에는 실수에서 배웠어야한다는 것을 알고 있습니다) 그리고 받아 들여진 대답은 두 번도 저에게 도움이되지 않았으므로 내 마음에는 신선하지만 경우에 대비하여 제 대답을 제출할 것이라고 생각했습니다. 다른 사람이이 문제를 겪고 있습니다 (또는 나중에 다시 필요합니다).
제 경우 문제는 하위 클래스의 초기화에 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