Python从一个类继承但是覆盖方法调用另一个类?

假设我有3个类:A,B和C.A是B的基类,B是C语言.层次结构在这里保持正常,但对于一种方法,它应该是不同的.对于C类,它应该像从A继承的那样行事.

例如这样:

class A(object):
    def m(self):
        print 'a'

class B(A):
    def m(self):
        super(B, self).m()
        print 'b'

class C(B):
    def m(self):
        super(A, self).m()
        print 'c'

所以基本上它应该像这样工作:

a = A()
a.m()
a

b = B()
b.m()
a
b

c = C()
c.m()
a
c

但它不适用于C类,因为我收到此错误:

AttributeError: 'super' object has no attribute 'm'

要为C类解决这个问题,我可以从A类继承,但我想继承B中的所有内容,对于特定的方法,我为基类A调用super.我的意思是该方法是一个例外.或者我应该以不同的方式为C类调用它以便工作?

我怎样才能做到这一点?

最佳答案
使用super调用,python将检查你的类的MRO,以确定在调用你想要的函数时使用哪个类.

由于您希望使此行为短路,因此您可以使用以下方法明确声明要使用该方法的类:

class C(B):
    def m(self):
        A.m(self)
        print 'c'

转载注明原文:Python从一个类继承但是覆盖方法调用另一个类? - 代码日志