以下代码使用上下文管理器将变量存储和加载到文件中。但是,必须设置value
上下文管理器 ( loaded.value
)所产生内容的属性非常烦人。我想要
不必像这样定义一个新类 LoadedValue
将上下文管理器 ( loaded
) 的生成值设置为保存的值。
解决这些问题中的任何一个将不胜感激。
import os
import pickle
from contextlib import contextmanager
class LoadedValue:
def __init__(self, value):
self.value = value
def __str__(self):
return "<LoadedValue: {}>".format(self.value)
@contextmanager
def load_manager(load_file="file.pkl"):
with open(load_file, "rb") as f:
loaded_object = LoadedValue(pickle.load(f))
try:
yield loaded_object
finally:
with open(load_file, "wb+") as f:
pickle.dump(loaded_object.value, f)
if __name__ == "__main__":
filename = "test.pkl"
with open(filename, "wb+") as f:
pickle.dump(7, f)
with load_manager(filename) as loaded:
print(loaded) # >>> <LoadedValue: 7>
loaded.value = 5 # this is what I have to do
# loaded = 5 # this is what I want to do
with load_manager(filename) as loaded:
print(loaded) # >>> <LoadedValue: 5>
注意:这最初是在 CodeReview 上发布的,但我决定在此处重新发布以获取答案,并将其留在 CodeReview 上以帮助以其他方式改进代码。
人到中年有点甜
相关分类