我在写一个银行应用程序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.total
,self.__total
因为我们应该使它变得private
相当public
可变?我的思路是否正确?
简而言之:没有办法在Python中拥有真正的"私有"类成员.运行时只是不支持内存保护,例如Java.
双下划线前缀破坏了名称,因此它包含了它所使用的类的名称(例如,__total
将成为_Balance__total
),但这主要用于允许子类定义看起来相同的名称,但引用不同的字段.
Python中的标准约定是使用单个下划线前缀 - _total
对于应被视为"私有"或"受保护"的类成员,然后相信其他开发人员将成为成年人并尊重(当然,这不是'总是一个安全的假设...)
这是非常难得一见的现代Python代码使用双下划线属性.