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

问题描述 投票:0回答:1

我试图根据传递的pd.Series将calendar模块扩展到颜色日,其索引是日期,其值是颜色代码(0到10)。

我没有足够深入OOP来做到这一点。 The TextCalendar class有一个方法formatyear,反过来称为formatweek方法。

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

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

python class oop override
1个回答
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?

© www.soinside.com 2019 - 2024. All rights reserved.