이 유형의 오류가 발생했을 때 고려해야 할 사항 :
이 오류 메시지가 표시되어이 게시물이 도움이되었다는 것을 알았습니다. 제 경우 __init__()
에는 객체 상속이 있는 곳 을 재정의했습니다 .
상속 된 예제는 다소 길기 때문에 상속을 사용하지 않는 더 간단한 예제로 건너 뛸 것입니다.
class MyBadInitClass:
def ___init__(self, name):
self.name = name
def name_foo(self, arg):
print(self)
print(arg)
print("My name is", self.name)
class MyNewClass:
def new_foo(self, arg):
print(self)
print(arg)
my_new_object = MyNewClass()
my_new_object.new_foo("NewFoo")
my_bad_init_object = MyBadInitClass(name="Test Name")
my_bad_init_object.name_foo("name foo")
결과는 다음과 같습니다
<__main__.MyNewClass object at 0x033C48D0>
NewFoo
Traceback (most recent call last):
File "C:/Users/Orange/PycharmProjects/Chapter9/bad_init_example.py", line 41, in <module>
my_bad_init_object = MyBadInitClass(name="Test Name")
TypeError: object() takes no parameters
PyCharm은이 오타를 잡지 못했습니다. 메모장 ++도 (다른 편집자 / IDE의 경우도) 아닙니다.
물론 이것은 "매개 변수 없음"TypeError이며, 파이썬에서 객체 초기화 측면에서 하나를 기대할 때 "두 개를 얻는 것"과 크게 다르지 않습니다.
주제 해결 : 구문 상으로 올 바르면 오버로딩 이니셜 라이저가 사용되지만 그렇지 않으면 무시되고 내장 기능이 대신 사용됩니다. 객체는 이것을 예상 / 처리하지 않으며 오류가 발생합니다.
sytax 오류의 경우 : 수정은 간단합니다. 사용자 정의 init 문을 편집하십시오.
def __init__(self, name):
self.name = name
self
입니다. 따라서 선언def method(arg):
은 메소드에 대해 잘못된 것def method(self, arg):
입니다. 메소드 디스패치가method(arg):
두 매개 변수 를 호출 하고 일치 시키려고self, arg
하면 해당 오류가 발생합니다.