我有两个Python3类:
class A:
def f1(self):
self.f2()
def f2(self):
pass
class B(A):
def f1(self):
super().f1()
def f2(self):
pass
我喜欢super()。f1()调用内部也调用A' s f2()。但是,它最终会调用B的f2()。我怎么能改变这个?
答案 0 :(得分:2)
当前行为是继承机制的预期行为。但您可以手动选择在A类中调用的方法:
class A:
def f1(self):
A.f2(self)
def f2(self):
pass
答案 1 :(得分:0)
我认为最简单的方法是在A中创建一个“隐藏”方法(按惯例,these are prefixed with _
:
class A:
def f1(self):
self._f2()
def f2(self):
print("A's f2")
self._f2()
def _f2(self):
print("A's _f2")
class B(A):
def f1(self):
super().f1()
def f2(self):
print("B's f2")
pass
b = B()
b.f1() # prints: A's _f2
这样做的好处是,如果出于某种原因,您仍然可以覆盖B中的方法。