繁体   English   中英

将可变对象锁定为python中的不可变对象

[英]Lock mutable objects as immutable in python

如何在Python中“锁定”对象?

说我有:

class Foo:
  def __init__(self):
    self.bar = []
    self.qnx = 10

我会尽可能多地修改foo:

foo = Foo()
foo.bar.append('blah')
foo.qnx = 20

但是,当我尝试时,我希望能够“锁定”它

lock(foo)
foo.bar.append('blah')  # raises some exception.
foo.qnx = 20            # raises some exception.

这可能在Python中吗?

这是一种简单的方法。

class Foo(object):
    def __init__(self):
        self._bar = []
        self._qnx = 10
        self._locked= False

    @property
    def locked(self):
        return self._locked

    def lock(self):
        self._locked = True

    @property
    def bar(self):
        if self.locked:
            return tuple(self._bar)
        return self._bar

    @property
    def qnx(self):
        return self._qnx
    @qnx.setter
    def qnx(self,val):
        if self.locked:
            raise AttributeError
        self._qnx = val

def lock(obj):
    obj.lock()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM