为了账号安全,请及时绑定邮箱和手机立即绑定

Python super()引发TypeError

Python super()引发TypeError

海绵宝宝撒 2019-11-29 09:14:34
在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 aTypeError: super() argument 1 must be type, not classobj如果我更换class X用class X(object),它会奏效。这有什么解释?
查看完整描述

3 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

原因是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


查看完整回答
反对 回复 2019-11-29
?
RISEBY

TA贡献1856条经验 获得超5个赞

另外,除非必须,否则不要使用super()。您可能会怀疑,使用新型类不是通用的“正确的事情”。


有时,您可能期望多重继承,并且可能会想要多重继承,但是在您知道MRO的繁琐细节之前,最好不要去管它,并坚持:


 X.a(self)


查看完整回答
反对 回复 2019-11-29
  • 3 回答
  • 0 关注
  • 465 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信