gpt4 book ai didi

Python:在类方法上使用 contextmanager 的意外行为

转载 作者:太空宇宙 更新时间:2023-11-03 12:21:59 25 4
gpt4 key购买 nike

<分区>

我正在尝试在 Python 中使用 with..as 结构来简化“可逆计算”代码的编写。但是,在类方法上使用 @contextmanager 似乎会更改 future 类实例的默认初始化。 Python 2.6 和 3.1 具有相同的行为。这是一个展示此行为的简单示例:

#!/usr/bin/env python

import contextlib

class SymList:
def __init__(self, L=[]):
self.L = L

@contextlib.contextmanager
def SymAdd(self, a):
self.L.append(a)
yield
self.L.append(a)

SL = SymList()
with SL.SymAdd(3):
SL.L.append(5)
print(SL.L) # Expect and see [3, 5, 3]
SL2 = SymList()
print(SL2.L) # Expect [] and see [3, 5, 3]


  • 为什么 SL2 不是 SymList 的新实例?
  • SL2.L 数据成员如何引用 SL.L 数据成员?

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