Python 变量名前缀单个下划线是什么意思?


Python 变量名可以以单个下划线开头。这是一种约定,表示该变量名现在是一个私有变量。它应该被视为随时可能更改的实现细节。程序员可以假设以单个下划线标记的变量保留供内部使用。

建议对半私有变量使用单个下划线,对完全私有变量使用双下划线。

解释 PEP-8;单个前导下划线:表示“内部使用”的较弱信号。例如,`from M import *` 会排除名称以下划线开头的对象。

语法

在 Python 变量中使用单个前导下划线的语法如下:

_name

示例 1

在下面的示例中,通过在 buzz 变量前添加单个下划线将其设为私有。这种方法仍然允许在实例化此类的对象并尝试访问 _buzz 变量时访问 _buzz 变量。因此,它被称为“弱私有指示”。

class Python: def __init__(self): self.fee = 37 self._buzz = 76 object = Python() print(object.fee) print(object._buzz)

输出

以下是上述代码的输出:

37 
76

示例 2

以下是单个前导下划线 (_v) 的示例:

class Sports: def __init__(self): self.name = 'Cricket' self._player = 'Sachin Tendulkar'

输出

以下是上述代码的输出,我们尝试访问“name”和“player”:

>>> s = Sports()
>>> s.name
'Cricket'
>>> s._player
'Sachin Tendulkar'

注意 - 单个前导下划线不会阻止访问单个前导下划线变量。但是,单个前导下划线会影响从模块导入的名称。

示例 3

在 untitled.py 文件中编写了以下代码:

# The file name is ‘untitled.py’ def function(): return "programming" def _private_function(): return 35

输出

如果您从 untitled.py 导入所有方法和名称,Python 不会导入以单个前导下划线开头的名称。

以下是上述代码的输出:

>>> from untitled import *
>>> function()
'programming'
>>> _private_function()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name '_private_function' is not defined

应正常导入模块以避免上述错误:

>>> import untitled
>>> untitled.function()
'programming'
>>> untitled._private_function()
35

注意 - 单个前导下划线仅用于内部使用。

示例 4

以下代码演示了双下划线和单个下划线前缀之间的区别。

class Python(): def __init__(self): self.__FullPrivate = "Coding" self._SemiPrivate = "Programs" p = Python() print ('p._SemiPrivate') print ('p.__FullPrivate')

输出

以下是上述代码的输出:

p._SemiPrivate
p.__FullPrivate

更新于:2022-11-23

5K+ 次浏览

开启您的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.