问题描述
|
我试图在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\')
构造函数工作正常,但是当我尝试打印对象时,ѭ1方法完全被忽略。我看到一些样本将其他不变类(例如int
和float
)子类化。他们都使用相同的约定。我想念什么吗? ѭ0对象有什么特别的地方吗?
更新:
代码似乎没有错。我试图在Django模板中打印Year
对象,并且由于Django使用可本地化的格式__str__
方法格式化date
对象而被忽略了。
解决方法
在
__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\')