我正在尝试在 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__
该方法被忽略了。
向__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
如果这是您的完整代码,则缺少 return 语句:
def __str__(self):
return self.strftime('%Y')