它的惯例是什么?
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))
答案 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
都是一样的