Python 单下划线前缀在变量中的含义是什么

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程