11

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で可能ですか?

4

1 に答える 1

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()
于 2012-05-28T03:08:39.680 に答える