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

这个问题在这里已经有了答案:

  • “最小的惊讶”和可变的默认参数30的答案
  • Python的构造函数和默认值[复制] 4个答案

  • 这种行为是由于默认参数在Python中的工作原理。

    尝试将SymList.__init__()更改为以下内容:

        def __init__(self, L=None):
            if L is None:
                 self.L = []
            else:
                 self.L = L
    

    当您在一个实例中修改self.L ,您还正在修改传入SymList.__init__()L ,因此使用您的代码的结果是当实例首次初始化时,所有实例将共享相同的L属性。

    链接地址: http://www.djcxy.com/p/28537.html

    上一篇: Python: Unexpected behavior using contextmanager on class method

    下一篇: The value of an empty list in function parameter, example here