0

pyv8安全に使用して、Pythonでjavascriptコードを実行しようとしています。結局のところ、javascript で使用されているオブジェクトがあり、非表示にしたいフィールドがいくつかあります。

Pythonにはカプセル化がないことは知っていますが(この質問で説明されているように)、それでも、を使用してアクセスを無効にする方法はあります__getattribute__か?

class Context(object):
    def __init__(self, debug):
        self._a = ...
        self._b = ...
        self._c = ...
        self._unlocked = False

    def __enter__(self):
        self._unlocked = True

    def __exit__(self, exc_type, exc_val, exc_tb):
        self._unlocked = False

    def __getattribute__(self, name):
        if object.__getattribute__(self, "_unlocked"):
            return object.__getattribute__(self, name)

        if name.startswith("_"):
            return None

        return object.__getattribute__(self, name)

したがって、このオブジェクトは、次のようにロックを解除しない限り、「プライベート」変数へのアクセスを拒否します。

ctx = Context()
...
with ctx:
   # _b is accessible here
   print ctx._b 

オブジェクトが「ロック」されているため、withjavascript から実行する方法も、呼び出す方法もない限り。__enter__

しかし、あまり効率的ではないようです。より良い方法はありますか?

4

1 に答える 1