You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何模块中datetime.now()固定为某时刻?如何动态更新时间戳?

问题分析与解决方案:动态获取类属性的时间戳

我来帮你拆解这个问题,其实本质是Python类属性的初始化时机导致的。

为什么时间戳始终不变?

当你导入test_mod模块时,模块内的所有代码会被一次性执行——包括Backup类的定义,以及Timestamp = datetime.now()这条赋值语句。也就是说,datetime.now()只在模块加载的那一刻运行了一次,把当时的时间戳赋值给了Backup.Timestamp这个类属性。之后不管你多少次访问这个属性,它都是当初那个固定的值,不会重新计算。

如何实现每次调用都更新时间戳?

我们需要让Timestamp每次被访问时都重新获取当前时间,最优雅的方式是用@classmethod结合@property,把它改成一个动态计算的类属性:

修改你的test_mod模块代码:

from datetime import datetime

class Backup:
    @classmethod
    @property
    def Timestamp(cls):
        return datetime.now()

这样修改后,当你导入模块并调用test_mod.Backup.Timestamp时,每次访问都会触发datetime.now()的执行,返回最新的时间戳,而不是模块导入时的固定值。

原理很简单:

  • @classmethod 让这个方法可以直接通过类(无需创建实例)调用;
  • @property 把方法伪装成属性的形式,保持了你原本想要的.Timestamp的简洁访问语法,同时每次访问都会重新执行方法逻辑。

如果你不介意用方法调用的形式,也可以简化成普通的类方法:

class Backup:
    @classmethod
    def get_timestamp(cls):
        return datetime.now()

调用时用test_mod.Backup.get_timestamp(),同样能每次获取最新时间,只是需要显式调用方法而非访问属性。

内容的提问来源于stack exchange,提问作者manoelpqueiroz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:04:04