我试图在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__
方法被完全忽略。我看到一些示例继承了其他不可变类,例如int
和float
。所有人都使用相同的惯例。我错过了什么吗? date
对象有什么特别之处吗?
更新:
似乎代码没有任何问题。我试图在Django模板中打印一个Year
对象,因为Django使用可本地化格式date
方法格式__str__
对象被忽略。
答案 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')