python - 在 Python 中声明私有(private)变量

标签 python python-2.7 oop private-members public-members

<分区>

我正在用 Python 编写一个银行应用程序,并从这里阅读一些源代码 Banking Application . balance 类定义如下:

class Balance(object):
    """ the balance class includes the balance operations """

    def __init__(self):
        """ instantiate the class """
        self.total = 0

    def add(self, value):
        """ add value to the total
        Args:
            value (int): numeric value
        """
        value = int(value)
        self.total += value

    def subtract(self, value):
        """ subtract value from the total
        Args:
            value (int): numeric value
        """
        value = int(value)
        self.total -= value

我的问题

由于不应在类之外访问余额详细信息,因此我们应该将属性 self.total 定义为 self.__total 因为我们应该将其设为 private 而不是 public 变量?我的思路在这里正确吗?

最佳答案

简而言之:Python 中没有真正的“私有(private)”类成员。运行时根本不支持内存保护,例如 Java。

双下划线前缀破坏了名称,因此它包含了它所使用的类的名称(例如,__total 将变为 _Balance__total),但这主要用于允许子类定义看起来相同但引用不同字段的名称。

Python 中的标准约定是使用单个下划线前缀 — _total — 用于应被视为“私有(private)”或“ protected ”的类成员,然后相信其他开发人员将成年人并尊重这一点(当然,这并不总是一个安全的假设......)

非常很少看到现代 Python 代码使用双下划线属性。

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

相关文章:

python - 用正确的方法包装Pyro的NameServer

Python:如何不在内联 IF 中添加列表理解

python - Groupby 求和并计算 python 中的多列

python - python中的这个程序如何工作?

c++ - 使用应用程序类有什么好处?

OOP 是否所有属性都有 getter 和 setter

python - 当传递命名参数时,matplotlib 不会绘图

python - 在 Python 中从另一个列表中减去一个列表

python - 在 Python 中对字符串进行编码

java - 子类中是否存在父类(super class)构造函数(但不被继承)?