gpt4 book ai didi

python - 如何更改屈服值

转载 作者:行者123 更新时间:2023-12-01 08:26:29 24 4
gpt4 key购买 nike

以下代码使用上下文管理器将变量存储和加载到文件中。但是,必须设置上下文管理器生成的值 (loaded.value) 的 value 属性,这非常烦人。我愿意

  1. 不必定义像 LoadedValue 这样的新类
  2. 将上下文管理器的生成值(已加载)设置为保存的值。

解决这些问题将不胜感激。

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>

注意:这是 originally posted在 CodeReview 上,但我决定将其重新发布到此处以获得答案,并将其保留在 CodeReview 上以帮助以其他方式改进代码。

最佳答案

不,没有办法覆盖Python中的赋值运算符,所以你不能做 loaded = 5

(你可以覆盖其他东西,这样它可能会起作用)

  • 覆盖__call__允许loaded(5)
  • 覆盖__lshift__允许loaded << 5
  • 覆盖__ior__允许loaded |= 5

(但是请转发给你的同事,否则 future 的同事可能永远不会原谅你)

此外,在with XXXX as Y:范围内发生的事情 block (通常)不能被生成上下文的方法访问,除非该范围之前可以被生成范围的地方访问(即全局命名空间等)

关于python - 如何更改屈服值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54210398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com