Можно ли создать подкласс класса неизменяемой даты и переопределить метод __str__? - PullRequest
0 голосов
/ 01 июня 2011

Я пытаюсь создать подкласс неизменного класса date в Python, но мне также нужно переопределить метод __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?

UPDATE:

Кажется, в коде нет ничего плохого. Я пытался напечатать объект Year внутри шаблона Django, и, поскольку Django форматирует объекты date, используя метод локализуемого формата __str__, игнорируется.

Ответы [ 2 ]

2 голосов
/ 01 июня 2011

Добавьте return к методу __str__.


UPDATE:

Я запустил ваш обновленный код на моей машине, и он отлично работает:

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 голос
/ 01 июня 2011

Если это ваш полный код, вы пропускаете оператор возврата:

def __str__(self):
    return self.strftime('%Y')
...