108

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)動作します。これについての説明は何ですか?

4

4 に答える 4

133

その理由は、新しいスタイルのクラス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
于 2009-01-28T20:48:26.683 に答える
1

さまざまな Xa() メソッドを試しました。ただし、a() を実行するには X のインスタンスが必要なようです。そのため、少なくとも私が遭遇したアプリケーションでは、以前の回答よりも完全に見える X().a(self) を実行しました。不必要な構築と破壊があるため、問題を処理する良い方法とは思えませんが、問題なく動作します。

私の特定のアプリケーションは Python の cmd.Cmd モジュールで、これは何らかの理由で明らかに NewStyle オブジェクトではありません。

最終結果:

X().a(self)
于 2012-04-02T10:18:40.420 に答える