Python 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

如果我更换class X用class X(object),它会奏效。这有什么解释?


海绵宝宝撒
浏览 466回答 3
3回答

慕尼黑的夜晚无繁华

原因是super()只能在新式类上运行,这在2.x系列中意味着从object:>>> class X(object):&nbsp; &nbsp; &nbsp; &nbsp; def a(self):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print 'a'>>> class Y(X):&nbsp; &nbsp; &nbsp; &nbsp; def a(self):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; super(Y, self).a()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print 'b'>>> c = Y()>>> c.a()ab

RISEBY

另外,除非必须,否则不要使用super()。您可能会怀疑,使用新型类不是通用的“正确的事情”。有时,您可能期望多重继承,并且可能会想要多重继承,但是在您知道MRO的繁琐细节之前,最好不要去管它,并坚持:&nbsp;X.a(self)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python