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