python - python类中私有(private)变量的实际实现

标签 python class private

<分区>

Possible Duplicate:
The meaning of a single- and a double-underscore before an object name in Python

我在阅读有关私有(private)变量的 python 文档时遇到了一个问题 link .

所以文档告诉我们,用下划线命名私有(private)变量是一种约定,但 python 不会将该字段设为私有(private)。

>>> class a():
      def __init__(self):
         self.public = 11
         self._priv = 12
>>> b = a()
>>> print b._priv
>>> 12

我想知道是否有一种方法可以使变量在 python 中“真正”私有(private)。

最佳答案

  • Guido van Rossum 说:我们都是成年人
  • 扩展版:我们都是成年人。如果必须的话,请随时搬起石头砸自己的脚。

如果必须的话,你可以一点隐藏它,但你真的不应该:

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

关于python - python类中私有(private)变量的实际实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14168791/

相关文章:

python - 检查 csv 文件中的输入

python - 我可以向写入单元格的公式添加字符吗?

c++ - 返回类析构函数

c++ - 软件设计从一个模块变为多个模块

Python 名称修改允许双向访问

python - 在 Dockerfile 中使用 'pyenv activate'

python - Python文件名中双下划线的意义

c++ - 用户定义类的运算符重载在 C++ 中不起作用

java - groovy 调用 Java 父类(super class)中的私有(private)方法

java - 自动将公共(public)更改为私有(private)(Java)