相似主体的覆盖方法

时间:2019-07-08 18:14:30

标签: python inheritance overriding

我有两个班级:一班和二班

class One:
    # self.a, self.b, self.c
    # ...
    def foo(self):
        self.a.foo()
        self.b.bar()
        self.c.hmm(1,2,3)

class Two(One):
    # super(Two, self).__init__()
    # self.d
    # ...
    def foo(self):
        self.a.foo()
        self.b.bar()
        self.d.wow()
        self.c.hmm(4,5,6)

一个和两个的foo()方法非常相似,以至于我好像在复制粘贴代码。 我知道我可以在其中一个单独的foo2()方法中执行共享代码,并为不同的值向foo()添加参数,但是我想知道是否有更好的方法可以做到这一点。 >

1 个答案:

答案 0 :(得分:4)

要从超类扩展方法,可以使用super

class One:
    ...

    def foo(self):
        self.a.foo()
        self.b.bar()
        self.c.hmm(1,2,3)

class Two(One):
    ...

    def foo(self):
        super().foo()
        self.d.wow()

注意,这不会保留调用方法的顺序。因此,如果顺序很重要,则必须重写整个foo方法。