[PYTHON] Python super ()가 TypeError를 발생시킵니다.
PYTHONPython super ()가 TypeError를 발생시킵니다.
Python 2.5에서 다음 코드는 TypeError를 발생시킵니다.
>>> class X:
def a(self):
print "a"
>>> class Y(X):
def a(self):
super(Y,self).a()
print "b"
>>> c = Y()
>>> c.a()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in a
TypeError: super() argument 1 must be type, not classobj
클래스 X를 클래스 X (객체)로 바꾸면 작동 할 것입니다. 이것에 대한 설명은 무엇입니까?
해결법
-
==============================
1.그 이유는 super ()가 new-style 클래스에서만 작동하기 때문입니다. 2.x 시리즈에서는 object에서 확장된다는 것을 의미합니다.
그 이유는 super ()가 new-style 클래스에서만 작동하기 때문입니다. 2.x 시리즈에서는 object에서 확장된다는 것을 의미합니다.
>>> class X(object): def a(self): print 'a' >>> class Y(X): def a(self): super(Y, self).a() print 'b' >>> c = Y() >>> c.a() a b
-
==============================
2.또한 super ()를 사용하지 않는 한 super ()를 사용하지 마십시오. 새로운 스타일의 수업으로 할 수있는 범용 "옳은 일"이 아닙니다.
또한 super ()를 사용하지 않는 한 super ()를 사용하지 마십시오. 새로운 스타일의 수업으로 할 수있는 범용 "옳은 일"이 아닙니다.
여러 차례의 상속이 필요할 것으로 예상되는 경우가있을 수 있지만 MRO의 털이 세부 사항을 알기 전까지는 혼자있는 그대로 두어야합니다.
X.a(self)
-
==============================
3.위의 답변 중 어느 것도 명확하게 언급하지 않은 경우. 부모 클래스는 "object"를 상속해야합니다.이 클래스는 본질적으로 새로운 스타일 클래스로 바꿀 것입니다.
위의 답변 중 어느 것도 명확하게 언급하지 않은 경우. 부모 클래스는 "object"를 상속해야합니다.이 클래스는 본질적으로 새로운 스타일 클래스로 바꿀 것입니다.
# python 3.x: class ClassName(object): # This is a new style class pass class ClassName: # This is also a new style class ( implicit inheritance from object ) pass # Python 2.x: class ClassName(object): # This is a new style class pass class ClassName: # This is a old style class pass
-
==============================
4.나는 다양한 X.a () 메소드를 시도했다. 그러나, 그들은 ()을 수행하기 위해 X의 인스턴스를 요구하는 것처럼 보였으므로 X (). (self)는 이전 답변보다 더 완벽하게 보였습니다. 불필요한 건설 및 파괴가 있기 때문에 문제를 다루는 좋은 방법이 아닌 것처럼 보이지만 잘 작동합니다.
나는 다양한 X.a () 메소드를 시도했다. 그러나, 그들은 ()을 수행하기 위해 X의 인스턴스를 요구하는 것처럼 보였으므로 X (). (self)는 이전 답변보다 더 완벽하게 보였습니다. 불필요한 건설 및 파괴가 있기 때문에 문제를 다루는 좋은 방법이 아닌 것처럼 보이지만 잘 작동합니다.
내 특정 응용 프로그램은 파이썬의 cmd.Cmd 모듈이었습니다.이 모듈은 어떤 이유로 든 NewStyle 객체가 아닙니다.
최종 결과:
X().a(self)
from https://stackoverflow.com/questions/489269/python-super-raises-typeerror by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬 요청 파일 업로드 (0) | 2018.10.07 |
---|---|
[PYTHON] 여러 프로세스간에 결과 큐 공유 (0) | 2018.10.07 |
[PYTHON] 사전 및 기본값 (0) | 2018.10.07 |
[PYTHON] 파이썬은 csv를 xlsx로 변환합니다. (0) | 2018.10.07 |
[PYTHON] 문자열에서 코드에서 모듈을로드하는 방법? (0) | 2018.10.07 |