Helpers - компьютеры, интернет, программирование

Как я могу изменить поведение datetime.__add__?

У меня есть кодовая база, в которой эта ошибка может быть довольно часто: добавление timedelta к объекту datetime с учетом часового пояса может привести в объекте даты и времени, который имеет правильный часовой пояс и правильный момент времени, но неправильное смещение из-за летнего времени.

Я хотел бы изменить поведение datetime.__add__. Я думал, что создаю подкласс datetime, а затем импортирую свой модифицированный подкласс, но из-за неизменности datetime это сложнее, чем я думал.

Вот что я пробовал:

#!/usr/bin/env python

import datetime as dt_orig

# 3rd party
import pytz


class datetime(dt_orig.datetime):
    def __new__(cls, *args, **kwargs):
        tzstring = None
        if 'tzinfo' in kwargs and isinstance(kwargs['tzinfo'], str):
            tzstring = kwargs['tzinfo']
            kwargs['tzinfo'] = dt_orig.timezone.utc
        dt_obj = super().__new__(cls, *args, **kwargs)
        # if tzstring is not None:  # When this is uncommented, it's not the custom datetime class but the standard Python class
        #     dt_obj = dt_obj.astimezone(pytz.timezone(tzstring))
        return dt_obj

    def __add__(self, other):
        if isinstance(other, dt_orig.timedelta):
            tmp = super().__add__(other)  # creates a datetime.datetime
            tmp = tmp.astimezone(pytz.utc).astimezone(tmp.tzinfo)
            return tmp
        else:
            return super().__add__(other)

    __radd__ = __add__

Таким образом, я могу создать собственный объект datetime, но когда я применяю obj.astimezone(...) (или любой другой метод, например add), я получаю datetime.datetime обратно.

Как я могу вернуть свой пользовательский объект datetime, сохраняя при этом реализацию datetime.datetime в большинстве случаев?


Новые материалы

Интуитивное понимание тензоров в машинном обучении
Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

Почему объяснимость так важна прямо сейчас?
По мере того, как системы искусственного интеллекта и инструменты на основе машинного обучения распространяются в нашей повседневной жизни, как практики, так и критики все чаще заявляют о..

Анимированный математический анализ
Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

Создание простого слайдера изображений с помощью JavaScript
Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

Создание базы данных с помощью супергероя «Python»
В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

ИИ для чайников: руководство для начинающих по пониманию будущего технологий
Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..