В Python, что подчеркивание перед переменной экземпляра? - PullRequest
14 голосов
/ 15 июля 2011

Что это за соглашение?

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 ]

15 голосов
/ 15 июля 2011

_ сигнализирует, что это частные участники. Это никоим образом не обеспечивается языком, поскольку все программисты на Python являются « согласными взрослыми ».

12 голосов
/ 15 июля 2011

Согласно PEP 8 :

Кроме того, следующие специальные формы с использованием ведущих или конечных знак подчеркивания (как правило, можно сочетать с любым Конвенция):

  • _single_leading_underscore: слабый индикатор "внутреннего использования". Например. "от М import * "не импортирует объекты, имя которых начинается с подчеркивания.

На самом деле это не относится к использованию единственного подчеркивания в члене класса, но они, как правило, подразумевают «внутреннее использование». Для более сильной версии того же самого, используйте два начальных подчеркивания (например, self.__foo) - Python сделает более сильную попытку предотвратить случайную перезапись элемента в подклассах, но определенный код, конечно, все еще может поэтому.

2 голосов
/ 15 июля 2011

Это подразумевает только внутреннее использование (аналогично частному в других языках), но не ограничено, как другие языки.

1 голос
/ 15 июля 2011

Это соглашение, согласно которому клиенты класса / объекта должны по возможности избегать использования этих атрибутов, поскольку они предназначены для внутреннего использования.

0 голосов
/ 17 января 2013

Это просто означает, что эти атрибуты предназначены только для внутреннего использования и, если возможно, не трогайте их.

Предположим, вы редактируете существующий код и видите перед ними переменные с подчеркиванием. это означает, что вы не должны редактировать их. Просто предупреждение.

так

self.name = a

self._name =a

self.__name=a

все одинаковы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...