我正在为我的文件构建一个自定义模块(我们称之为test_mod
),在其中定义带有时间戳的备份路径:
from datetime import datetime
class Backup:
Timestamp = datetime.now()
使用import test_mod
并调用test_mod.Backup.Timestamp
将返回我导入模块时的时间戳,但是当我一次又一次地调用属性时,时间戳保持不变。
为什么会这样?如果我每次调用.Timestamp
进行属性更新时该怎么办?
答案 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