是否可以对不可变日期类进行子类化并覆盖__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__方法被完全忽略。我已经看到一些示例对其他不可变类(例如 intfloat(进行子类化。他们都使用相同的约定。我错过了什么吗?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')

相关内容

  • 没有找到相关文章

最新更新