在Python中,实例变量前的下划线是什么意思?

17 投票
5 回答
21325 浏览
提问于 2025-04-16 21:34

这是什么约定呢?

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程序员都是“成年人”,可以自己决定怎么做。

撰写回答