0

我正在尝试在 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__因为对象被“锁定”。

不过似乎效率不高。有没有更好的办法?

4

1 回答 1

0

您可以使用限制访问的属性获取器吗?

class Context(object):
    def __init__(self):
        self._x = None

    @property
    def x(self):
    """I'm the 'x' property."""
        return "Property can not be accessed."

    @x.setter
    def x(self, value):
        self._x = value

    @x.deleter
    def x(self):
        del self._x

更多信息可以在这里找到: https ://docs.python.org/3/library/functions.html#property

于 2017-01-26T00:12:16.063 回答