Con*_*101 2 python class instance-variables
例如,如果我创建一个类 Point。
类点:
def__init__(self, x, y):
self._x = x
self._y = y
Run Code Online (Sandbox Code Playgroud)
和
类点:
def__init__(self, x, y):
self.x = x
self.y = y
Run Code Online (Sandbox Code Playgroud)
self._x 和 self.x 的使用有什么区别。
单下划线只是一种命名约定,表明该属性应被视为“半私有”(类似地,双下划线表示“私有”),但它没有语义差异:代码的两个版本都应该完全符合相同的。根据PEP-8:
_single_leading_underscore:弱“内部使用”指标。例如from M import *,不导入名称以下划线开头的对象。
single_trailing_underscore_: 按惯例使用以避免与 Python 关键字冲突。
__double_leading_underscore: 命名类属性时,调用名称修改(在 class 内部FooBar,__boo变为 _FooBar__boo)。
__double_leading_and_trailing_underscore__:存在于用户控制的命名空间中的“魔法”对象或属性。例如__init__,__import__或__file__。永远不要发明这样的名字;仅按照文档使用它们。
如果出于某种原因,您有一个带有下划线前缀的变量,并且可以公开访问此变量,那么在模块的__all__ 列表中包含此变量的名称是一个很好的做法。这用作代码内文档的一种形式。