Python3中如何保存类实例创建的具体时间?
首先得澄清一个误解:你的代码其实已经正确保存了实例创建时刻的时间,get_borningTime方法只是对已经存在的self.borningTime做格式化输出,并不会每次调用都获取新的时间。你看到两个实例的时间相同,只是因为它们创建的速度太快了——在Python 3.6之前,datetime.datetime.now()的精度是秒级,同一秒内创建的实例自然会得到相同的时间戳。
接下来针对你的需求,给出几个优化和验证方案:
1. 让创建时间精确到微秒,区分同时创建的实例
修改get_borningTime方法,在格式化字符串中加入微秒部分,这样即使实例在同一秒创建,也能通过微秒区分:
def get_borningTime(self): return self.borningTime.strftime("%Y-%m-%d %X.%f")
现在运行代码,你会看到类似2018-05-24 17:42:45.123456这样的输出,每个实例的时间会有细微差异。
2. 优化代码结构(避免重复导入模块)
把import datetime移到文件顶部,不要放在__init__方法里——每次创建实例都导入模块完全没必要,会浪费性能:
import datetime class Ants(object): """Workers""" ID = 1 def __init__(self): self.borningTime = datetime.datetime.now() self.ID = Ants.ID Ants.ID += 1 def get_ID(self): return "Ant ID:" + str(self.ID).zfill(5) def get_borningTime(self): return self.borningTime.strftime("%Y-%m-%d %X.%f")
3. (可选)让ID跨程序运行保持递增
如果希望每次启动程序时,实例ID不会从1重置,而是接着上次的数值继续增长,可以把ID值持久化到文件中:
import datetime import os class Ants(object): """Workers""" ID_FILE = "ant_id.txt" # 加载上次保存的ID,文件不存在则初始化为1 if os.path.exists(ID_FILE): with open(ID_FILE, 'r') as f: ID = int(f.read().strip()) else: ID = 1 def __init__(self): self.borningTime = datetime.datetime.now() self.ID = Ants.ID Ants.ID += 1 # 把更新后的ID写回文件 with open(Ants.ID_FILE, 'w') as f: f.write(str(Ants.ID)) def get_ID(self): return "Ant ID:" + str(self.ID).zfill(5) def get_borningTime(self): return self.borningTime.strftime("%Y-%m-%d %X.%f")
验证时间是否真的被持久保存
你可以做个小测试:创建实例后等待几秒再输出时间,看看是否还是创建时的时间:
my1Ant = Ants() import time time.sleep(3) # 等待3秒 print(my1Ant.get_borningTime()) # 输出的应该是3秒前的创建时间,不是当前时间
这能直观证明self.borningTime确实保存了实例创建时的初始值,不会随时间变化。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

