在Python中声明私有变量[重复]
Posted
技术标签:
【中文标题】在Python中声明私有变量[重复]【英文标题】:Declaring private variable in Python [duplicate] 【发布时间】:2016-04-14 14:10:57 【问题描述】:我正在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 中没有私有成员变量这样的东西。双下划线名称是为了避免被子类意外覆盖。 是的。您仍然可以访问 self.__total,但名称将是B = Balance(); B._Balance__total
。
见The meaning of a single- and a double-underscore before an object name in Python
@python:你不知道。你把它命名为_total
,它文档是其他代码不应该访问的。但是你不能阻止访问,Python 希望每个人都表现得像负责任的成年人。
另见Does Python have “private” variables in classes?
【参考方案1】:
简而言之:没有办法在 Python 中拥有真正的“私有”类成员。运行时根本不支持内存保护,例如,Java 支持。
双下划线前缀破坏了名称,因此它包含了它所使用的类的名称(例如,__total
将变为_Balance__total
),但这主要用于允许子类定义看起来相同的名称,但引用不同的字段。
Python 中的标准约定是对应该被视为“私有”或“受保护”的类成员使用单个下划线前缀 — _total
,然后相信其他开发人员将是成年人并尊重这一点(当然,这并不总是一个安全的假设……)
现代 Python 代码使用双下划线属性非常很少见。
【讨论】:
Reference link 阅读更多内容。 你是说没有办法保护我的变量self.total
免受未经授权的访问?
不。正如我在上一段中所说,Python 确实假设开发代码的开发人员不会是恶意的。以上是关于在Python中声明私有变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Access VBA 中的另一个私有子获取私有子中声明的变量的值