Python 中的私有变量

2025年3月17日 | 阅读 3 分钟

根据定义,私有变量是指只能被其所属类的成员访问,而不能被其他类的成员访问的变量。当程序运行时,这些变量用于访问值,以保守秘密信息不被其他类访问。Java 允许私有变量和方法仅在类内部和外部访问,并且私有函数在此上下文中不能被重写。私有变量使用 `private` 关键字声明。Python 中没有可以被称为私有成员的声明或定义。

Python 中没有只能从对象内部访问的“私有”实例变量。但是,大多数 Python 程序员和编码人员遵循一种标准,即使用以下划线开头的名称。例如,函数、方法或数据成员 `_java` 应被视为 API 或任何 Python 代码的非公共部分。在阅读本文的过程中,我们还将尝试理解几种类型末尾下划线的使用,例如 `range(10)` 中的 `10` 和 `__init__(self)` 中的 `__init__`。

私有变量的工作原理

实际上,Python 编程语言没有任何私有成员或变量。在 Java 中,这是通过 `private` 关键字实现的;而在 Python 中,这是通过两个下划线实现的。

任何需要标记为私有的属性或函数都应以 `()` 开头。当我们以私有数据成员的形式声明 Python 变量时,程序员可以轻松地确保值不会像声明为公共变量那样容易地被更改或修改。除非将值声明为公共的,否则任何类都可以访问它们并更改或调整它们的值,这会导致脚本崩溃。

示例 1

输出

(privateVariable1 : 2018)
I'm inside the class mclass which this is private method

说明

在上面的程序中,我们有一个类定义为“mclass”,其中我们使用两个下划线将因子和方法声明为私有。私有变量表示为“\_\_PrivateVariable1”,私有方法表示为“\_\_PrivateMethod1”,以便它们可以在同一个类“mclass”内部访问,但不能在该类外部访问;如果我们尝试这样做,我们会收到一个错误,说明该类中不存在该特性。

\_ 单个前导下划线

基本上,在函数、方法或数据组件的开头加一个下划线表示该方法不是 API 的一部分,不应被访问。让我们看一下这段代码

该片段摘自 Django 源代码的 forms.py。这意味着错误是一种属性,并且它们也是 API 的一部分;但是,由于方法 `_get_errors` 是“私有”的,所以没有人应该使用它。

示例 2

输出

Private Variables in Python

说明

在上面的程序中,我们可以看到该函数是私有的,但由于我们试图从“mainclass”以外的类访问它,因此会显示一个错误消息,说明定义的类没有该属性的实例。因此,在类中声明的所有变量和函数默认都是公共的。但是,如果我们在此后使用下划线,它们将变为私有类成员,只能由它们所属类的其他成员访问。为了消除子类给出的名称混淆,使用了称为“数据混淆”或“名称变形”的过程来使变量或方法私有化。

Python 不支持真正的私有,因此它被称为“弱内部使用指示器”。因此,模块中的私有参数、方法、函数和子类仅使用一个下划线(\_)声明。因此,我们可以仅用一个下划线定义私有变量。