Почему datetime.now () имеет фиксированный момент в моем модуле? - PullRequest
0 голосов
/ 19 апреля 2019

Я создаю собственный модуль (назовем его test_mod) для моих файлов, где я определяю путь резервного копирования с отметкой времени:

from datetime import datetime

class Backup:
    Timestamp = datetime.now()

Использование import test_mod и вызов test_mod.Backup.Timestamp вернут мне временную метку момента, когда модуль был импортирован, но когда я вызываю атрибут снова и снова, временная метка остается прежней.

Почему это так и что мне делать, если я хочу делать обновление атрибута .Timestamp всякий раз, когда я его вызываю?

Ответы [ 3 ]

2 голосов
/ 19 апреля 2019

Я думаю, что это не проблема вашего модуля вместо вашего класса Backup.Вы должны поместить инициализацию Timestamp в метод __init__ вашего класса.

Этот метод является методом инициализации вашего класса и вызывается каждый раз, когда вы создаете новый объект типа Backup.

class Backup:
    def __init__(self):
        self.Timestamp = datetime.now()

Я получаю разные временные метки с этим решением.

Если вы инициализируете переменную класса вне функции __init__(), переменная будет использоваться всеми классами, и вы получите одинаковую временную метку от каждого объекта типа Backup.

Ссылка: Переменные внутри и снаружи класса __init __ () function

Если вы хотите использовать текущую метку времени, вы можете заключить datetime.now() в новую функциюРезервное копирование вашего класса.

1 голос
/ 19 апреля 2019

Вы сохранили значение datetime.now() в атрибуте. Это означает, что вы вызвали метод при создании экземпляра класса и сохранили возвращаемое значение в атрибуте.

Вы должны вызывать datetime.now() внутри метода / функции, если вы хотите, чтобы временная метка всегда была актуальной.

0 голосов
/ 19 апреля 2019

, если вы хотите использовать его как атрибут, а не как метод, т.е. если вы предпочитаете Backup (). Timestamp, а не Backup (). Timestamp (), вам следует использовать @ property

из datetime, импортировать datetimeот времени импортировать сон

class Backup:
    @property
    def time_stamp(self):
        return datetime.now()

чтобы проверить это:

b = Backup()

print(b.time_stamp)
sleep(1)
print(b.time_stamp)

вывод:

2019-04-19 18:29:20.207778
2019-04-19 18:29:21.207825
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...