小编use*_*421的帖子

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

我正在尝试使用Python中的with..as contruct来简化"可逆计算"代码的编写.但是,@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]
Run Code Online (Sandbox Code Playgroud)


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

python with-statement contextmanager

3
推荐指数
1
解决办法
3135
查看次数

标签 统计

contextmanager ×1

python ×1

with-statement ×1