Python で with..as 構造を使用して、「可逆コンピューティング」コードを簡単に記述できるようにしようとしています。ただし、@contextmanager
クラス メソッドで使用すると、将来のクラス インスタンスのデフォルトの初期化が変更されるようです。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
ますか?