0
    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 方法,以便可以在其中放入一些数据。有人可以告诉我我在这里做错了什么吗?

4

1 回答 1

2

您的问题是formatmonth 调用formatday,并且您没有覆盖formatmonth,因此formatmonth 使用formatday 的常规参数,即仅使用day 和weekday。

如果您不希望格式月的数据存在,那么您可以只给数据一个默认值,例如:

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,或者您可以将数据作为实例变量,例如,从 aself.data中获取它,然后可以使用a.data = .... 如果它每天都在变化,您可能应该让 formatday 从其他地方获取该数据,而不是简单地将其作为参数。

通常,使用需要额外参数或具有某些不兼容 API的方法来覆盖方法是危险的。您不覆盖调用该方法的任何内容都会中断。

于 2013-06-13T18:52:14.900 回答