当我阅读关于私有变量链接的python文档时,我遇到了一个问题。
因此,文档告诉我们,用下划线命名私有变量是惯例,但是python并不使字段私有。
>>> class a():
def __init__(self):
self.public = 11
self._priv = 12
>>> b = a()
>>> print b._priv
>>> 12我想知道在python中是否有一种使变量“真正”私有的方法。
发布于 2013-01-05 05:06:57
如果你必须的话,你可以把它藏起来,但你真的不应该:
class NonAdult(object):
def __init__(self):
self.__private_number = '42'
def __getattr__(self, name):
if name.startswith('__private'):
raise AttributeError
if __name__ == '__main__':
na = NonAdult()
print(na.__private_number) # raises AttributeError
print(na.__dict__['_NonAdult__private_number']) # would still return 42发布于 2013-01-05 05:06:05
不,Python对象中没有私有变量或方法。“我们都是成年人”这个短语通常被用来解释他们被认为是不必要的。
单个下划线有时用于“私有”成员,只作为惯例购买;它没有功能用途。
导致双下划线导致名称损坏,但只是为了避免子类中的命名冲突。它不提供任何“私人会员安全”,因为你仍然可以得到他们。
发布于 2013-01-05 05:08:16
您可以使用双前导下划线来调用Pythons mangling。于是__priv变成了_MyClass__priv。它仍然是可访问的,但防止子类意外重写。
https://stackoverflow.com/questions/14168791
复制相似问题