2011-06-01 58 views
-1

我想在Python中继承不可变的date类,但我也需要重写__str__方法。到目前为止,我有以下几点:是否可以继承不变的日期类并覆盖__str__方法?

from datetime import date 

class Year(date): 
    def __new__(cls, year): 
     return super(Year, cls).__new__(cls, year, 1, 1) 
    def __str__(self): 
     return self.strftime('%Y') 

构造函数工作正常,但是当我尝试打印物体的__str__方法完全忽略。我已经看到一些样本继承其他不可变类,如intfloat。他们都使用相同的惯例。我错过了什么吗? date对象有什么特别之处吗?

更新:

看来代码没有问题。我试图在Django模板中打印一个Year对象,并且因为Django使用可本地化的格式格式date对象__str__方法被忽略。

回答

2

添加return__str__方法。


UPDATE:

我跑我的机器上你更新代码,并能正常工作:

[email protected]:~/so/python# cat date2.py 
from datetime import date 

class Year(date): 
    def __new__(cls, year): 
     return super(Year, cls).__new__(cls, year, 1, 1) 
    def __str__(self): 
     return self.strftime('%Y') 

y=Year(2011) 
print str(y) 
[email protected]:~/so/python# python date2.py 
2011 
+0

好吧,那只是一个复制/粘贴错误。我编辑了代码。 – 2011-06-01 01:23:25

+0

更新了我的答案 – 2011-06-01 01:26:07

+0

你是对的,它正在工作。我正在使用Django模板打印这个值。显然,它忽略了__str__方法。 – 2011-06-01 01:40:30

1

如果这是你完整的代码你缺少return语句:

def __str__(self): 
    return self.strftime('%Y') 
+0

嗯,这仅仅是一个复制/粘贴错误。我编辑了代码。 – 2011-06-01 01:20:17