如何在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中吗?
答案 0 :(得分:13)
这是一种简单的方法。
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()