Переопределение метода с похожим телом - PullRequest
1 голос
/ 08 июля 2019

У меня есть два класса: один и два

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() в One, который выполняет общий код и добавляет аргументы к foo() для различных значений, но мне интересно, есть ли лучший способ сделать это.

1 Ответ

4 голосов
/ 08 июля 2019

Чтобы расширить метод из суперкласса, вы можете использовать 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.

...