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'

请注意c = C._method(),我正在调用未初始化类C的类方法。从 开始C,我还调用未初始化的类AB(遍历 MRO)的类方法。

我怎样才能做到这一点?

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 回答