是否可以子类化不可变日期类并覆盖__str__方法?

时间:2011-06-01 01:08:50

标签: python datetime date subclass immutability

我试图在Python中继承不可变date类,但我还需要覆盖__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 个答案:

答案 0 :(得分:2)

return方法添加__str__


<强>更新

我在我的机器上运行了更新的代码,它运行正常:

aj@localhost:~/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)
aj@localhost:~/so/python# python date2.py
2011

答案 1 :(得分:1)

如果这是您的完整代码,则缺少return语句:

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