문제

Python 2.5에서 다음 코드가 a 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

내가 교체하면 class X ~와 함께 class X(object), 그것은 작동합니다. 이것에 대한 설명은 무엇입니까?

도움이 되었습니까?

해결책

그 이유는 그 이유입니다 super() 만 작동합니다 새로운 스타일의 수업, 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

다른 팁

또한, 필요하지 않는 한 super ()를 사용하지 마십시오. 당신이 의심 할 수있는 새로운 스타일의 수업과 관련이있는 것은 일반적인 목적이 아닙니다.

여러 상속을 기대할 때가 있고 원할 수도 있지만 MRO의 털이 많은 세부 사항을 알기 전까지는 내버려두고 고수하는 것이 가장 좋습니다.

 X.a(self)

위의 답변 중 어느 것도 명확하게 언급하지 않은 경우. 부모 수업은 "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

다양한 XA () 방법을 시도했습니다. 그러나 A ()를 수행하기 위해 X 인스턴스가 필요해 보이므로 x (). A (self)를 수행했습니다. 불필요한 구조와 파괴가 있기 때문에 문제를 처리하는 좋은 방법은 아니지만 잘 작동합니다.

내 특정 응용 프로그램은 Python의 CMD.CMD 모듈이며 어떤 이유로 든 새로운 스타일 객체가 아닙니다.

최종 결과:

X().a(self)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top