在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中声明私有变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python中的私有变量和方法[重复]

我可以在公共方法中声明私有变量吗?

如何从 Access VBA 中的另一个私有子获取私有子中声明的变量的值

在继承中使用私有变量[重复]

如何在带有接口的 Typescript 中声明公共和私有变量?

TypeScript 构造函数中的私有变量声明以诱导 DI