Python继承 - 如何继承类函数?

时间:2013-12-05 15:01:13

标签: python class inheritance

我是python的新手,在继承方面遇到了一些麻烦。

我有这堂课:

class A(object):
    def __init__(self, foo, bar):
        pass     
    def func1(self):
        op1()
        op2()
    def func2(self):
        pass

我正在使用另一个覆盖它的类:

class B(A):
    def func2(self):
        # do something

问题是我希望func1获取其所有操作并添加例如op3() 因此,在使用此课程时,我可以选择使用op1op2op3

我尝试过使用:

def func1(self):
    op3()

但它只是给了我op3没有op1op2的选项。

我看到有“超级”选项,但我不确定我是否理解如何使用它。

1 个答案:

答案 0 :(得分:7)

您可以在func1中调用超类实现:

class B(A):
    def func1(self):
        super(B, self).func1()
        op3()

此处super(B, self).func1将在MRO(方法解析顺序)中搜索类层次结构,从类B开始搜索下一个func1()方法,将其绑定到self并让你叫它。

这将首先调用原始func1(),执行op1()op2(),然后您的被覆盖版本可以添加新操作。

您也可以先调用op3() ,然后调用基础实现。

您也可以直接在类A上查找父方法,但该方法将被解除绑定。明确传递self

class B(A):
    def func1(self):
        A.func1(self)
        op3()

这会绕过搜索类继承层次结构,使您的类不那么灵活。

有关何时使用super()的详细实用建议,请参阅Raymond Hettinger's blog post on super()