如何覆盖Python中的方法以传递其他参数?

时间:2018-08-31 07:02:48

标签: python class oop override

我正在尝试根据传递的pd.Series将calendar模块扩展为彩色日,该系列的索引是日期,其值是颜色代码(0到10)。

我对OOP不够深入。 The TextCalendar class具有方法formatyear,该方法依次调用方法formatweek

我当前的解决方案是定义一个class ColoredTextCalendar(TextCalendar),其__init__()设置一个类属性date_to_color(熊猫颜色代码系列,日期作为索引)。然后,我基本上复制并粘贴了原始的formatyearformatweek方法,并只更改了其中的两三行:formatyear现在调用带有附加参数{{ 1}}和formatweek,以便此方法知道它格式化的实际日期(以前它只是打印了一个7天的日历周,如year)。现在month在其类属性12 13 14 15 16 17 18中查找相应的颜色代码,并相应地为每天的字符串着色。

我正在做的工作是什么,但感觉是错误的,例如应该有一个更简单,更直接的解决方案。复制粘贴一个很长的方法并只更改几行感觉不对-这不是您通常的OOP操作方式,对吗?

1 个答案:

答案 0 :(得分:0)

如何覆盖示例:

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 and **kwargs?