Python 为什么在我的模块中将datetime.now()设置为固定时间?
我正在为我的文件构建一个自定义模块(我们称之为Python 为什么在我的模块中将datetime.now()设置为固定时间?,python,class,datetime,module,Python,Class,Datetime,Module,我正在为我的文件构建一个自定义模块(我们称之为test\u mod),其中我定义了一个带有时间戳的备份路径: from datetime import datetime class Backup: Timestamp = datetime.now() 使用import test\u mod并调用test\u mod.Backup.Timestamp将返回导入模块时的时间戳,但当我反复调用该属性时,时间戳保持不变 这是为什么?如果我想在每次调用时更新.Timestamp属性,该怎么办?
test\u mod
),其中我定义了一个带有时间戳的备份路径:
from datetime import datetime
class Backup:
Timestamp = datetime.now()
使用import test\u mod
并调用test\u mod.Backup.Timestamp
将返回导入模块时的时间戳,但当我反复调用该属性时,时间戳保持不变
这是为什么?如果我想在每次调用时更新
.Timestamp
属性,该怎么办?您将datetime.now()的值保存到属性中。这意味着您在创建类实例时调用了该方法,并将返回值保存到属性中
如果希望时间戳始终为实际值,则应在方法/函数中调用datetime.now() 我认为这不是你的模块问题,而是你的类备份问题。
您应该将Timestamp的初始化放在类的\uuuu init\uuuu
方法中
此方法是类的初始化方法,每次创建备份类型的新对象时都会调用它
class Backup:
def __init__(self):
self.Timestamp = datetime.now()
我用这个解决方案得到了不同的时间戳
如果在\uuuu init\uuuuu()
函数之外初始化一个类变量,则该变量由所有类共享,并且从备份类型的每个对象获得相同的时间戳
class Backup:
def __init__(self):
self.Timestamp = datetime.now()
链接:
当需要当前时间戳时,可以将datetime.now()
包装到类Backup的新函数中。如果希望将其用作属性而不是方法,即如果您更喜欢Backup().timestamp而不是Backup().timestamp(),则应使用@property
从日期时间导入日期时间
从时间上导入睡眠
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
我确实喜欢这个解决方案。但是现在让我们假设我有一个方法test(self)
,其中返回'a string'+str(self.Timestamp)
;它输出一个TypeError:test()缺少1个必需的位置参数:“self”
(使用str(Timestamp)
也会产生此错误),该如何处理?能否发布整个类定义?我看不出这有什么问题。