我是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()
让使用这个类的时候我会选择使用op1
,op2
或op3
。
我试过使用:
def func1(self):
op3()
但是它只是给我选择了op3
不op1
和的选项op2
。
我看到有“超级”选项,但是我不确定我如何使用它。
您可以在中调用超类实现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] 删除。
我来说两句