我怎样才能覆盖两个相互调用的方法,同时使用super()来访问基类方法?

时间:2018-05-02 15:34:53

标签: python oop inheritance overloading super

我有两个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()。我怎么能改变这个?

2 个答案:

答案 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中的方法。