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

Python类实例化时默认参数为当前UTC时间未实时更新的问题咨询

为什么__init__的默认参数不会每次实例化都重新计算?

这是Python里一个经典的“新手坑”,原因其实很好理解:函数(包括类的__init__方法)的默认参数值是在函数被定义的那一刻就计算并固定下来的,而不是每次调用函数时重新计算。

回到你的代码里,当你写下def __init__(self, time = datetime.datetime.utcnow()):这一行时,Python会立刻执行datetime.datetime.utcnow(),把返回的时间对象存在这个默认参数的位置。不管你之后隔多久创建Timer的实例,只要不传入time参数,就会直接用这个提前计算好的旧时间,不会再去调用utcnow()。

举个直观的例子:你先创建a = Timer(),过10分钟再创建b = Timer(),会发现两个实例的time完全一样——就是你定义Timer类那一刻的时间。

要解决这个问题,标准做法是把默认参数设为None,然后在__init__方法内部动态计算当前时间:

import datetime
class Timer:
    def __init__(self, time=None):
        # 若未传入time参数,实时获取当前UTC时间
        if time is None:
            time = datetime.datetime.utcnow()
        self.time = time
        print('Instance created at', self.time)

这样一来,每次创建实例时,只要没传time,都会在__init__执行时重新调用utcnow(),得到的就是实例创建那一刻的时间了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 07:47:30