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

用户名

我是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()

但是它只是给我选择了op3op1的选项op2

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

马丁·彼得斯(Martijn Pieters)

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

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

这里super(B, self).func1将从类B开始以MRO(方法解析顺序)搜索类层次结构,寻找下一个func1()方法,并将其绑定self并调用它。

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

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

您也可以直接在class上查找父方法A,但是该方法将不受约束。self显式传递

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

这样绕过了搜索类继承层次结构的过程,从而使您的类灵活性降低。

有关何时使用的一些出色的实用建议,请参见Raymond Hettinger的博客文章super()super()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章