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

时间:2011-07-14 22:41:48

标签: 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))

5 个答案:

答案 0 :(得分:15)

_表示这些是私人成员。它没有以任何方式强制执行,因为Python程序员都是“consenting adults”。

答案 1 :(得分:12)

根据PEP 8

  

此外,以下特殊形式使用前导或尾随      下划线被认可(这些通常可以与任何情况相结合      约定):

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

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

答案 2 :(得分:2)

它仅表示内部使用(类似于其他语言中的私有),但不受其他语言的限制。

答案 3 :(得分:1)

这是一个惯例,声明类/对象的客户端应该尽可能避免使用这些属性,因为它们是供内部使用的。

答案 4 :(得分:0)

这只是意味着这些属性仅供内部使用,如果可能,请不要触摸它们。

假设您正在编辑某些现有代码,并且在它们前面看到带有下划线的变量。这意味着你不应该编辑它们。只是一个警告。

所以

self.name = a

self._name =a

self.__name=a

都是一样的