一个类在多大程度上可以“保护”其中一个属性来自外部访问?
例如,具有传统_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进程和检查记忆)
答案 0 :(得分:6)
你可能正在寻找getters and setters。稍微不那么复杂的方法是使用__secret
,它将调用名称修改将其转换为_Paranoid__secret
。
但是,是的,我应该注意到python社区并不像某些语言那样真正重视隐私。或者俗话说 we're all consenting adults here 。
答案 1 :(得分: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 blog post。