1. ホーム
  2. python

[解決済み] Python super() は TypeError を発生させます。

2022-10-22 06:20:02

質問

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 Xclass 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