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
オブジェクトが「ロック」されているため、with
javascript から実行する方法も、呼び出す方法もない限り。__enter__
しかし、あまり効率的ではないようです。より良い方法はありますか?