Сохранение даты и времени в переменной - PullRequest
0 голосов
/ 24 мая 2018

Я хочу сохранить в переменной «определенный» момент, когда создается экземпляр класса , как я могу это сделать в Python 3?Пожалуйста, взгляните на следующий фрагмент кода:

class Ants(object):
    """Workers"""
    ID = 1
    def __init__(self):
        import datetime
        self.borningTime = datetime.datetime.now()
        self.ID = Ants.ID
        Ants.ID += 1

    def get_ID(self):
        return "Ant ID:" + str(self.ID).zfill(5)

    def get_borningTime(self):
        return self.borningTime.strftime("%Y-%m-%d  %X")

my1Ant = Ants()
my2Ant = Ants()

print(my1Ant.get_ID(), my1Ant.get_borningTime())
print(my2Ant.get_ID(), my2Ant.get_borningTime())

Когда я запускаю это, вывод:

Ant ID:00001 2018-05-24  17:42:45
Ant ID:00002 2018-05-24  17:42:45

И когда я запускаю его снова:

Ant ID:00001 2018-05-24  17:43:05
Ant ID:00002 2018-05-24  17:43:05

Это означает, что "self.borningTime" не записывает и не сохраняет свое значение, когда я создал экземпляр в самый первый раз (что я и хочу), каждый раз получает новое значениеЯ это называю.

Как я могу делать то, что хочу?что мне не хватает в моем коде?Заранее спасибо.

С уважением.

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Ваши экземпляры создаются в одну секунду.Поместите time.sleep(1) между ними, и вы увидите изменение времени.Вы также можете использовать %X.%f для печати микросекунд времени, но разрешение ваших часов может по-прежнему создавать их с тем же штампом.

Один из способов исправить это, чтобы убедиться, что у вас есть уникальное время, состоит в том, чтобыдождитесь времени, чтобы поставить «галочку»:

import time

class Ants(object):
    """Workers"""
    ID = 1
    def __init__(self):
        import datetime
        self.borningTime = datetime.datetime.now()

        # Wait for the time to change
        while datetime.datetime.now() == self.borningTime:
            pass

        self.ID = Ants.ID
        Ants.ID += 1

    def get_ID(self):
        return "Ant ID:" + str(self.ID).zfill(5)

    def get_borningTime(self):
        return self.borningTime.strftime("%Y-%m-%d  %X.%f") # Add microseconds.

my1Ant = Ants()
my2Ant = Ants()

print(my1Ant.get_ID(), my1Ant.get_borningTime())
print(my2Ant.get_ID(), my2Ant.get_borningTime())

Вывод:

Ant ID:00001 2018-05-24  09:10:41.085253
Ant ID:00002 2018-05-24  09:10:41.100867

В моей системе для получения нового значения времени потребовалось около 15 мс.

Есливам не нужно значение даты / времени, time.perf_counter() имеет гораздо более высокую точность, но не связано с конкретной датой и временем.Вы можете сравнить только разницу между двумя показаниями.В моей системе это меньше микросекунды на тик, но вы все равно можете назвать ее достаточно быстро, чтобы не тикать:

>>> time.perf_counter() - time.perf_counter()
0.0
>>> time.perf_counter() - time.perf_counter()
-3.775817631890277e-07
0 голосов
/ 24 мая 2018

Время записывается каждый раз, когда создается экземпляр класса .

Причина, по которой время обновляется при каждом запуске сценария, заключается в том, что вы создаете новые экземпляры с помощью этих двух строк.:

my1Ant = Ants()
my2Ant = Ants()

Если вместо этого вы впоследствии получите доступ только к атрибутам , не создавая новых экземпляров класса, вы обнаружите, что время зафиксировано.

...