我正在尝试在 python 中执行 javascript 代码,pyv8
安全使用。归根结底,我有一个 javascript 正在使用的对象,我想隐藏的字段很少。
我知道python没有封装(如this question中所述),但是,有没有办法使用禁用访问__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__
因为对象被“锁定”。
不过似乎效率不高。有没有更好的办法?