我重写了一个方法在HTMLCalendar类.但是它给了我一个错误.如何正确地继承它


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

你这里的问题是formatmonth调用formatday,而你没有覆盖formatmonth,所以formatmonth使用formatday的常规参数,即只有day和weekday。

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

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的方法重写方法是危险的。

相关内容

最新更新