28

私はこのようなコードを持っています:

class A(object):
    def __init__(self):
          self.a = 1

class B(A):
    def __init__(self):
        self.b = 2
        super(self.__class__, self).__init__()

class C(B):
    def __init__(self):
        self.c = 3
        super(self.__class__, self).__init__()

Bのインスタンス化は期待どおりに機能しますが、Cのインスタンス化は無限に繰り返され、スタックオーバーフローが発生します。どうすればこれを解決できますか?

4

1 に答える 1

51

C呼び出しをインスタンス化するときB.__init__self.__class__はCのままなので、super()呼び出しはそれをBに戻します。

super()を呼び出すときは、クラス名を直接使用してください。したがって、Bではsuper(B, self)、ではなく、を呼び出します(そして、適切な方法として、 Csuper(self.__class__, self)で使用します)。super(C, self)Python 3からは、引数なしでsuper()を使用するだけで、同じことを実現できます。

于 2010-11-20T21:25:41.267 に答える