我给了一个A带有方法f和g. 在 的实现中A.f,方法self.g被调用,即被A.g使用。(我不能/不愿意改变这个类A,因为它来自一个 python 包。)
现在我想建立一个子类B并A想要覆盖方法f和g. 在 的实现中B.f,我调用了super().fie A.f。在 的实现中B.g.,我调用了self.fie 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 类,fisfit和gis fit_transform。在这个 scikit-learn 类中,fit_transform被显式覆盖,fit不幸的是使用fit_transform. 为了确保我的子类B不继承fit_transform自A,我必须以通常的方式重新定义它,这会导致如解释的那样无限递归。