可以子类化不可变日期类并重写__str__方法吗?
我正在尝试在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__
方法被忽略了。
2 个回答
1
如果这是你完整的代码,那你缺少了一个返回语句:
def __str__(self):
return self.strftime('%Y')
2
在 __str__
方法里加一个 return
。
更新:
我在我的电脑上运行了你 更新过的 代码,结果运行得很好:
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