【发布时间】:2020-05-24 17:24:58
【问题描述】:
我正在尝试编写能够跟踪创建的类实例并通过会话保存它的 python 代码。我试图通过在类减速中创建一个列表来跟踪实例。我的代码如下:
class test_object:
_tracking = []
def __init__(self, text):
self.name = text
test_object._tracking.insert(0, self)
with open("tst.pkl", mode="rb") as f:
try:
pickles = dill.load(f)
except:
pickles = test_object
logger.warning("Found dill to be empty")
f.close()
当腌制数据为空时,我的问题是处理。在这种情况下,我想做的是简单地使用基类。我遇到的问题是test_object._tracking 最终等于pickles._tracking。有没有办法复制test_object,这样当test_object._tracking 获得更新时,pickles._tracking 保持不变?
【问题讨论】:
-
在 'except' 部分,您将泡菜设置为 test_object 类,而不是该类的实例。是这个意图吗?为什么? (另外,不需要关闭 f,因为您使用的是 'with')。
-
@Roy2012 是的,关键是将它设置为类。我想腌制这个类,它有一个实例列表。这个想法是以简单而紧凑的方式将类及其实例腌制和解封。这里的想法是,如果没有任何东西被腌制,我想要一种在没有任何实例的情况下复制类的方法。由于
test_object还没有被调用,它的_tracking应该是空的,所以这是一种在没有任何实例的情况下将pickle设置为类的方法。