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

pythonserver side programmingprogramming更新于 2024/2/12 6:19:00

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

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

套用 PEP-8 的话;单前导下划线:一个"内部使用"的不良信号。例如,from M import * 排除名称以下划线开头的对象。

语法

Python 变量的单个 pre 下划线语法如下 −

_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'

输出

以下是上述代码的输出,我们尝试访问"名称"和"玩家 -

>>> 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


相关文章