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)
也会产生此错误),该如何处理?能否发布整个类定义?我看不出这有什么问题。