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

TIM*_*MEX 14 python oop

它的惯例是什么?

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))
Run Code Online (Sandbox Code Playgroud)

Fre*_*Foo 15

_这些是私人成员的信号.它没有以任何方式强制执行,因为Python程序员都是" 同意成人 ".

  • 是的,如果你这样做,python不会强行或抱怨(从外面访问).并且它通常被开发人员采用,以便找出内部使用哪个变量与外部引用的变量或实例变量之间的差异 (2认同)

Dan*_*den 12

根据PEP 8:

此外,还会识别使用前导或尾部下划线的以下特殊形式(这些形式通常可与任何案例约定结合使用):

  • _single_leading_underscore:弱"内部使用"指标.例如,"来自M import*"不会导入名称以下划线开头的对象.

它实际上并不是指在类的成员中使用单个下划线,但这些通常用于暗示"内部使用".对于同一事物的更强版本,使用两个前导下划线(例如self.__foo) - Python将更有力地尝试防止子类意外覆盖成员,但确定的代码当然仍然可以这样做.

  • @TIMEX:这是"约定"这个词的定义,是的.它没有强制执行,但它没有受到伤害,并且通常有助于遵循它. (3认同)

Ign*_*ams 1

这是一个约定,规定类/对象的客户端应尽可能避免使用这些属性,因为它们仅供内部使用。