例如,如果我创建一个类Point。
课堂要点:
def__init__(self, x, y):
self._x = x
self._y = y
和
课堂要点:
def__init__(self, x, y):
self.x = x
self.y = y
self._x和self.x的使用有什么区别?
python大神给出的解决方案
单个下划线只是一个命名约定,用于声明该属性应被视为“半私有”(类似地,双下划线表示“私有”),但没有语义上的区别:这两个版本的代码应完全一样相同。根据PEP-8:
_single_leading_underscore
:“内部使用”指示器较弱。例如。 from M import *
不会导入名称以下划线开头的对象。
single_trailing_underscore_
:按惯例用于避免与Python关键字冲突。
__double_leading_underscore
:命名类属性时,调用名称处理(在类FooBar
中,__boo
成为_ FooBar__boo
)。
__double_leading_and_trailing_underscore__
:位于用户控制的名称空间中的“魔术”对象或属性。例如。 __init__
,__import__
或__file__
。请勿发明此类名称;仅按记录使用它们。
如果由于某种原因,您有一个带下划线前缀的变量,并且可以公开访问该变量,那么,将这个变量的名称包含在模块的__all__ list中是一种很好的做法。这用作代码内文档的一种形式。