2014-09-13 3 views
0

Классу datetime.time у Python не хватает функциональности += с datetime.timedelta. Я пытаюсь исправить это, создав производный класс Time. Затем я использую datetime+= и получаю datetime.time().Добавление + = поддержка datetime.time

Однако я не могу понять, как передать значения родительского класса. Я пытался реализовать метод copy, как показано ниже, но я получаю ошибку:

AttributeError: attribute 'hour' of 'datetime.time' objects is not writable 

Моя текущая реализация:

from datetime import datetime, timedelta, time 

class Time(time): 
    def copy(self,other): 
     self.hour = other.hour 
     self.minute = other.minute 
     self.second = other.second 
     self.microsecond = other.microsecond 

    def __add__(self,other): 
     if isinstance(other,timedelta): 
      dt = toDatetime(self) 
      dt += other 
      t = Time() 
      t.copy(dt.time()) 
      return t 

Как я могу скопировать значения родительского класса? Кроме того, есть ли лучший способ для меня получить поддержку += для эквивалента datetime.time, и я просто собираюсь сделать все это неправильно?

+0

'datetime.time()' объекты не поддерживают арифметику с 'timedelta', потому что у них нет компонента * даты * для обработки переполнения. Каким будет результат «времени (23, 59, 59) + timedelta (hours = 1)»? –

+0

Рядом с этим 'datetime.time()' объекты являются * неизменяемыми *. –

+0

Я вижу. Таким образом, неизменность - это кирпичная стена, в которой я бегу. Похоже, мне придется реализовать его по-другому. –

ответ

1

Чтобы создать копию, передать в компоненты время конструктору:

t = Time(dt.hour, dt.minute, dt.second, dt.microsecond) 

datetime.time() объекты являются иначе неизменны; вы можете использовать их time.replace() method, чтобы создать новый экземпляр с замененными конкретными компонентами, но так как вы строите новый экземпляр подкласса в любом случае, проще всего пропустить в компонентах.

Смежные вопросы