Как переопределить методы в Python для передачи дополнительных аргументов? - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь расширить модуль calendar для цветных дней в соответствии с переданным pd.Series, индексом которого являются даты, а значением является цветовой код (от 0 до 10).

Я недостаточно глубоко в ООП, чтобы сделать это. Класс TextCalendar имеет метод formatyear, который, в свою очередь, вызывает метод formatweek.

Мое текущее решение состоит в том, чтобы определить class ColoredTextCalendar(TextCalendar), чье __init__() устанавливает свойство класса date_to_color (серия цветовых кодов панд, с датой в качестве индекса). Затем я в основном скопировал и вставил оригинальные методы formatyear и formatweek и изменил в них только две или три строки: formatyear теперь вызывает formatweek с дополнительными параметрами year и month, так что этот метод знает, какую фактическую дату он форматирует (ранее он просто печатал 7-дневную календарную неделю, например 12 13 14 15 16 17 18). И formatweek теперь ищет соответствующий код цвета в свойстве класса date_to_color и соответственно окрашивает строку каждого дня.

То, что я делаю, вроде работает, но оно кажется неправильным, как будто должно быть более простое, более простое решение. Копирование и вставка длинного метода и изменение только нескольких строк кажется неправильным - это не то, как вы обычно делаете ООП, верно?

1 Ответ

0 голосов
/ 31 августа 2018

Пример того, как переопределить:

class Base:
    def foo(self, x):
        x += 1
        x += 2
        x += 3

Учитывая этот простой базовый класс, я хочу переопределить строку x + = 2 в середине

переписать свой родительский метод следующим образом

class Base:
    def foo(self, x):
        x += 1
        self.bar(x)
        x += 3

    def bar(self, x):
        x += 2

class Child(Base):
    def bar(self, x):
        # my new code

вам нужно иметь неопределенное количество параметров в ваших методах, которые вы можете использовать * args и ** kwargs, смотрите это * args и ** kwargs?

...