2011-06-01 57 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