2

我正在编写一个银行应用程序,并从这里银行应用程序Python读取一些源代码。该类定义如下: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.totalself.__total因为我们应该使它成为一个private相当public可变的?我的思路在这里正确吗?

4

1 回答 1

6

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

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

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

现代 Python代码很少使用双下划线属性。

于 2016-01-10T03:24:45.527 回答