2

私は本当に、そのスーパークラスのサブクラスからスーパークラスのクラスメソッドへの何らかの方法を見つける必要があります。

一般化されたコードは次のとおりです。

class A(object):
    def __init__(self):
        print "A init"

    @classmethod
    def _method(cls):
        print cls
        return cls()


class B(A):
    def __init__(self):
        print "B init"

class C(B):
    def __init__(self):
        print "C init"

    @classmethod
    def _method(cls):
        print "calling super(C)'s classmethod"
        return super(C)._method()

c = C._method()

その結果:

Traceback (most recent call last):
  File "C:/Python27x64/testclass", line 26, in <module>
    c = C._method()
  File "C:/Python27x64/testclass", line 22, in _method
    return super(C)._method()
AttributeError: 'super' object has no attribute '_method'

から、初期化されていないクラスのclassmethodc = C._method()を呼び出していることに注意してください。Cから、初期化されていないクラスまたは(MROをトラバースする)のclassmethodCも呼び出します。AB

どうすればこれを達成できますか?

4

1 に答える 1

1

呼び出しにcls変数を含める必要があります。super

class C(B):
    def __init__(self):
        print "C init"

    @classmethod
    def _method(cls):
        print "calling super(C)'s classmethod"
        return super(C, cls)._method()
于 2013-02-15T11:49:09.470 に答える