我给了一个A
带有方法f
和g
. 在 的实现中A.f
,方法self.g
被调用,即被A.g
使用。(我不能/不愿意改变这个类A
,因为它来自一个 python 包。)
现在我想建立一个子类B
并A
想要覆盖方法f
和g
. 在 的实现中B.f
,我调用了super().f
ie A.f
。在 的实现中B.g.
,我调用了self.f
ie B.f
。
我希望一切都定义明确:
B.g
调用B.f
调用A.f
调用A.g
事实上,RecursionError
当我遇到无限数量的递归时,我得到了一个:
B.g
调用B.f
调用A.f
调用B.g
我不正确理解什么?
这是一个实现:
class A:
def f(self):
print('Method A.f was called.')
self.g()
def g(self):
print('Method A.g was called.')
class B(A):
def f(self):
print('Method B.f was called.')
super().f()
def g(self):
print('Method B.g was called.')
self.f()
b = B()
b.g()
澄清一下:在我的应用程序中,A
是一个 scikit-learn 类,f
isfit
和g
is fit_transform
。在这个 scikit-learn 类中,fit_transform
被显式覆盖,fit
不幸的是使用fit_transform
. 为了确保我的子类B
不继承fit_transform
自A
,我必须以通常的方式重新定义它,这会导致如解释的那样无限递归。