为什么在我的模块中将datetime.now()设置为固定时间?

时间:2019-04-19 15:19:58

标签: python class datetime module

我正在为我的文件构建一个自定义模块(我们称之为test_mod),在其中定义带有时间戳的备份路径:

from datetime import datetime

class Backup:
    Timestamp = datetime.now()

使用import test_mod并调用test_mod.Backup.Timestamp将返回我导入模块时的时间戳,但是当我一次又一次地调用属性时,时间戳保持不变。

为什么会这样?如果我每次调用.Timestamp进行属性更新时该怎么办?

3 个答案:

答案 0 :(得分:2)

我认为这不是模块而不是类Backup的问题。 您应该将Timestamp的初始化应用于类的__init__方法中。

此方法是您类的初始化方法,每次创建备份类型的新对象时都会调用此方法。

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

此解决方案的时间戳不同。

如果您在__init__()函数外部初始化类变量,则该变量将由所有类共享,并且您将从Backup类型的每个对象获得相同的时间戳。

链接:Variables inside and outside of a class __init__() function

当需要当前时间戳时,可以将datetime.now()包装到类Backup的新函数中。

答案 1 :(得分:1)

您将input { s3 { access_key_id => "access key" bucket => "bucketname" secret_access_key => "secret" endpoint => "endpoint" prefix => "prefix" add_field => { source => gzfiles } additional_settings => { "force_path_style" => true } } } 的值保存到属性中。这意味着,您在创建类实例时调用了该方法,并将返回值保存到属性中。

如果希望时间戳始终是实际的,则应在方法/函数内调用datetime.now()

答案 2 :(得分:0)

如果要将其用作属性而不是方法,即,如果您更喜欢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