我正在重写HTMLCalendar类中的方法。但这给了我一个错误。我如何正确继承这个?

2024-05-28 20:59:23 发布

您现在位置:Python中文网/ 问答频道 /正文

    class foo(HTMLCalendar):
        def formatday(self, day, weekday, data):
            if day==0
                return '<td class="noday">&nbsp;</td>'

            else:
                return '<td class="%s">%d %s</td>' % (self.cssclasses[weekday], day, data)

    a = foo()
    a.formatmonth(1, 2)

每当我尝试这样做时,它会给我一个错误:formatday()正好接受4个参数(给定3个)。我试图覆盖formatday方法,以便可以在其中放入一些数据。有人能告诉我我做错了什么吗?在


Tags: selfdatareturniffoodefelseclass
1条回答
网友
1楼 · 发布于 2024-05-28 20:59:23

这里的问题是formatmonth调用formatday,而不是重写formatmonth,因此formatmonth使用formatday的常规参数,即仅使用day和weekday。在

如果您不希望formatmonth的数据在那里,那么您可以给数据一个默认值,例如:

class foo(HTMLCalendar):
    def formatday(self, day, weekday, data=''):
        if day==0: # note error here in original code
            return '<td class="noday">&nbsp;</td>'
        else:
            return '<td class="%s">%d %s</td>' % (self.cssclasses[weekday], day, data)

a = foo()
a.formatmonth(1, 2)

如果你想要数据在那里,那么你的选择取决于数据是什么。这个月的每一天都应该是一样的吗?如果是这样,那么您也可以重写formatmonth,或者将数据作为一个实例变量,例如,从self.data获取它,然后用a.data = ...进行设置。如果它每天都在变化,您可能应该让formatday从其他地方获取数据,而不是简单地将其作为参数。在

一般来说,用一个需要额外参数或具有一些不兼容API的方法重写方法是危险的。任何不重写的调用该方法的操作都将中断。在

相关问题 更多 >

    热门问题