Skip to main content
 首页 » 编程设计

Python:替换日历模块中的方法

2025年05月04日12powertoolsteam

我正在尝试替换日历模块中的两种方法:

import calendar 
 
 
c = calendar.HTMLCalendar(calendar.MONDAY) 
def ext_formatday(self, day, weekday, *notes): 
    if day == 0: 
        return '<td class="noday">&nbsp;</td>' 
    if len(notes) == 0: 
        return '<td class="%s">%d<br /></td>' % (self.cssclasses[weekday], day) 
    else: 
        return '<td class="%s">%d<br />%s</td>' % (self.cssclasses[weekday], day, notes) 
 
def ext_formatweek(self, theweek, *notes): 
    if len(notes) == 0: 
        s = ''.join(self.formatday(d, wd) for (d, wd) in theweek) 
    else: 
        s = ''.join(self.formatday(d, wd, notes) for (d, wd) in theweek) 
    return '<tr>%s</tr>' % s  
 
c.formatday = ext_formatday 
c.formatweek = ext_formatweek 
 
print c.formatmonth(2012,1,"foobar") 

这行不通 - 有人可以指点我相关文献或指出我做错了什么吗? 我正在尝试从以下线程中实现 Alan Hynes 的建议:thread 现在对我来说已经太晚了,我已经围绕这个问题思考了一个多小时。

提前致谢,
雅各布

请您参考如下方法:

尝试替换类中的方法而不是实例。

像这样:

import calendar                                                                                                  
 
 
def ext_formatday(self, day, weekday, *notes):                                                                   
    if day == 0:                                                                                                 
        return '<td class="noday">&nbsp;</td>'                                                                   
    if len(notes) == 0:                                                                                          
        return '<td class="%s">%d<br /></td>' % (self.cssclasses[weekday], day)                                  
    else:                                                                                                        
        return '<td class="%s">%d<br />%s</td>' % (self.cssclasses[weekday], day, notes)                         
 
def ext_formatweek(self, theweek, *notes):                                                                       
    if len(notes) == 0:                                                                                          
        s = ''.join(self.formatday(d, wd) for (d, wd) in theweek)                                                
    else:                                                                                                        
        s = ''.join(self.formatday(d, wd, notes) for (d, wd) in theweek)                                         
    return '<tr>%s</tr>' % s                                                                                     
 
calendar.HTMLCalendar.formatday = ext_formatday                                                                  
calendar.HTMLCalendar.formatweek = ext_formatweek                                                                
 
c = calendar.HTMLCalendar(calendar.MONDAY)                                                                       
print c.formatmonth(2012,1,"foobar")