2

一个类在多大程度上可以“保护”它的一个属性免受外部访问?

例如具有常规_secret属性的类,原始值很容易访问:

class Paranoid(object):
    def __init__(self):
        self._secret = 0

    def set(self, val):
        self._secret = val * 10

    def get(self):
        return self._secret / 10

p = Paranoid()
p.set(123)
print p.get() # 123
print p._secret # 1230, should be inaccessible

如何使访问_secret变得更加困难?

这没有实际应用,我只是好奇是否有新颖的方法可以使其更难访问(在 Python 的上下文中 - 所以忽略你可以将调试器附加到 Python 进程并检查内存的事实)

4

2 回答 2

6

您可能正在寻找getter 和 setter。稍微不那么复杂的方法是使用__secret,它将调用名称修改将其转换为_Paranoid__secret.

但是,是的,我应该指出,python 社区并不像某些语言那样真正重视隐私。或者俗话说我们在这里都是成年人

于 2012-05-08T16:12:16.733 回答
4
>>> def Paranoid():
...     _secret_dict = {'_secret': 0}
...     class ParanoidClass(object):
...             def set(self, val):
...                     _secret_dict['_secret'] = val * 10
...             def get(self):
...                     return _secret_dict['_secret'] / 10
...     return ParanoidClass()
... 
>>> p = Paranoid()
>>> p.set(123)
>>> p.get()
123

这让我想起了Steve Yegge 的一篇博文。

于 2012-05-08T16:14:24.707 回答