Python 单下划线前缀在变量中的含义是什么
Python变量名可以以单下划线开头。这作为一种约定,表示该变量名现在是一个私有变量。应该将其视为可能随时更改的实现细节。程序员可以假设以单下划线标记的变量为内部使用保留。
建议使用单下划线来表示半私有变量,建议使用双下划线表示完全私有变量。
以PEP-8为例,单个前导下划线是一个”内部使用”的贫弱信号。例如,从M中导入*会排除以下划线开头的对象。
语法
Python变量与单个前置下划线的语法如下 –
_name
示例1
在下面的示例中,通过在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