在Python中,实例变量前的下划线是什么意思?
这是什么约定呢?
class IndexedText(object):
def __init__(self, stemmer, text):
self._text = text
self._stemmer = stemmer
self._index = nltk.Index((self._stem(word), i) for (i, word) in enumerate(text))
5 个回答
2
这意味着它主要是供内部使用的(有点像其他语言中的私有属性),但不像其他语言那样严格限制。
13
根据PEP 8的规定:
另外,以下几种使用前导或后缀下划线的特殊形式是被认可的(这些通常可以和任何命名风格结合使用):
_single_leading_underscore
:表示“内部使用”的弱指示。例如,from M import *
不会导入以下划线开头的对象。
这里其实并不是说类的成员使用单个下划线,而是通常用来表示“内部使用”。
如果你想要更强烈的表示,可以使用两个前导下划线(比如 self.__foo
)。这样,Python会更努力地防止子类意外覆盖这个成员,但如果有人真的想要这样做,还是可以做到的。
__double_leading_underscore
:在命名类属性时,会触发名称重整(在类 FooBar 内,__boo
会变成_FooBar__boo
;详见下文)。
20
这里的 _
表示这些是私有成员。也就是说,这些成员不应该被外部直接访问。不过,这并不是语言强制规定的,因为Python程序员都是“成年人”,可以自己决定怎么做。