例如,如果我创建一个Point类。
class Point:
def__init__(self, x, y):
self._x = x
self._y = y
和
class Point:
def__init__(self, x, y):
self.x = x
self.y = y
self._x和self.x的使用有什么不同。
答案 0 :(得分:4)
单个下划线只是一个命名惯例,表明应该考虑该属性"半私有" (类似地,双下划线表示"私有"),但它没有语义差异:两个版本的代码应该完全相同。根据{{3}}:
_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__
。不要发明这样的名字;只能按照文件记录使用它们。
如果由于某种原因,您有一个以下划线作为前缀的变量,并且可以公开访问此变量,那么最好在模块中包含此变量的名称{{3 }}。这是一种代码内文档。