当前位置:  开发笔记 > 编程语言 > 正文

Python super()引发了TypeError

如何解决《Pythonsuper()引发了TypeError》经验,为你挑选了2个好方法。

在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 "", line 1, in 
  File "", line 3, in a
TypeError: super() argument 1 must be type, not classobj

如果我更换class Xclass X(object),它会奏效.对此有何解释?



1> Cody Brociou..:

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


@tsunami如果你想进入超类,做"Xa(自我)"
2.2当引入新式类时,3.0就成了默认类.
从什么python版本这成为默认行为?

2> bobince..:

另外,除非必须,否则不要使用super().对于您可能怀疑的新式课程,这不是通用的"正确的事情".

有些时候你期待多重继承并且你可能想要它,但是在你知道MRO的毛茸茸细节之前,最好不要管它并坚持:

 X.a(self)


这是正确的,因为在我6个月的Python/Django中,我一直在使用super作为"一般正确的事情"吗?
推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有