[python] Python 상속 : TypeError : object .__ init __ ()에는 매개 변수가 없습니다.
이 오류가 발생합니다.
TypeError: object.__init__() takes no parameters
내 코드를 실행할 때 나는 여기서 내가 뭘 잘못하고 있는지 실제로 보지 못합니다.
class IRCReplyModule(object):
activated=True
moduleHandlerResultList=None
moduleHandlerCommandlist=None
modulename=""
def __init__(self,modulename):
self.modulename = modulename
class SimpleHelloWorld(IRCReplyModule):
def __init__(self):
super(IRCReplyModule,self).__init__('hello world')
답변
super () 호출에서 잘못된 클래스 이름을 호출하고 있습니다.
class SimpleHelloWorld(IRCReplyModule):
def __init__(self):
#super(IRCReplyModule,self).__init__('hello world')
super(SimpleHelloWorld,self).__init__('hello world')
본질적으로 해결하려는 것은 __init__
매개 변수를 사용하지 않는 객체 기본 클래스입니다.
이미 알고있는 클래스를 지정해야하는 것은 약간 중복되므로 python3에서 다음을 수행 할 수 있습니다. super().__init__()
답변
이것은 최근에 두 번 저를 물었습니다 (처음에는 실수에서 배웠어야한다는 것을 알고 있습니다) 그리고 받아 들여진 대답은 두 번도 저에게 도움이되지 않았으므로 내 마음에는 신선하지만 경우에 대비하여 제 대답을 제출할 것이라고 생각했습니다. 다른 사람이이 문제를 겪고 있습니다 (또는 나중에 다시 필요합니다).
제 경우 문제는 하위 클래스의 초기화에 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) # no error
Bar(42, named_optional_param={'xyz': 123}) # raises TypeError: object.__init__() takes no parameters
이 문제를 해결하려면 Foo .__ init__ 메서드에서 수행하는 순서를 변경하면됩니다. 예 :
class Foo(object):
def __init__(self, required_param_1, *args, **kwargs):
self.some_named_optional_param = kwargs.pop('named_optional_param', None)
# call super only AFTER poping the kwargs
super(Foo, self).__init__(*args, **kwargs)
self.required_param = required_param_1