Обезьяна, исправляющая дату и время, дает странные результаты - PullRequest
3 голосов
/ 28 сентября 2011

Я пытаюсь сделать одну из моих библиотек совместимой с Python 2.6. Он использует метод datetime.timedelta.total_seconds, который был добавлен в 2.7, поэтому, чтобы он работал с 2.6, я хотел, чтобы обезьяна исправила его в timedelta следующим образом:

import datetime

if not hasattr(datetime.timedelta, 'total_seconds'):

    class timedelta(datetime.timedelta):
        def total_seconds(self):
            return self.days * 86400.0 + self.seconds + self.microseconds * 1e-6

    datetime.timedelta = timedelta

В некоторых случаях это действительно работает, например, если я создаю переменную timedelta, у нее есть этот метод. Но если новый объект timedelta создается путем вычитания двух значений datetime.datetime, метод в результирующем объекте отсутствует.

Что не так и как мне это исправить?

1 Ответ

3 голосов
/ 28 сентября 2011

Модуль datetime полностью написан на C.

Сюда входит функция, которая вычитает один datetime.datetime объект из другого.Эта функция, называемая new_delta(), напрямую создает экземпляр PyDateTime_DeltaType, который является исходным классом datetime.timedelta (написанным на C).Он не заметит, что вы отскочили datetime.timedelta к своему собственному классу в Python-land.

Я не вижу легких путей обхода.

...