为了账号安全,请及时绑定邮箱和手机立即绑定

如何更改屈服值

如何更改屈服值

qq_笑_17 2021-10-12 10:51:22
以下代码使用上下文管理器将变量存储和加载到文件中。但是,必须设置value上下文管理器 ( loaded.value)所产生内容的属性非常烦人。我想要不必像这样定义一个新类 LoadedValue将上下文管理器 ( loaded) 的生成值设置为保存的值。解决这些问题中的任何一个将不胜感激。import osimport picklefrom contextlib import contextmanagerclass LoadedValue:    def __init__(self, value):        self.value = value    def __str__(self):        return "<LoadedValue: {}>".format(self.value)@contextmanagerdef 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 上以帮助以其他方式改进代码。
查看完整描述

1 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

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

(你可以覆盖其他东西,所以它可能有点工作)

  • 覆盖__call__以允许loaded(5)

  • 覆盖__lshift__以允许loaded << 5

  • 覆盖__ior__以允许loaded |= 5

(但是要提醒你的同事,否则未来的同事可能永远不会原谅你)

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


查看完整回答
反对 回复 2021-10-12
  • 1 回答
  • 0 关注
  • 171 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号