Верхний символ подчеркивания Python _переменные

Мы знаем, что в классе функции, начинающиеся с __function__, не импортируются при использовании:

from module import *

Кто-то спросил, что такое _variable? У меня никогда не было никого. Они существуют? Является ли это понятием переменной, к которой нельзя получить доступ с помощью объекта класса или чего-то еще?

Ответ 2

Имя переменной, начинающееся с подчеркивания, является сильным намеком на то, что эту переменную следует рассматривать как конфиденциальную.

Прочитайте http://docs.python.org/tutorial/classes.html#private-variables

Ответ 3

Пример стоит 1000 слов:

class test(object):
    def __init__(self):
        self.a = 0
        self._b = 0
    def change_a(self):
        self.a = 1
    def change_b(self):
        self._b = 1
    def display_b(self):
        print "_b: ", self._b

as-is, результат:

c = test()
c.a
0
#expected.

c.b
AttributeError: 'test' object has no attribute 'b'
# because _b is private

c.display_b()
_b: 0
# methods can display private variables.

теперь назначьте некоторые значения:

c.a=100
c.b=100
c.a
100
# again, expected
c.b
100
# as expected
c.display_b()
_b: 0
# again, private variable can't be changed directly.

теперь вызовите внутренние функции:

c.change_a()
c.change_b()
c.a
1
# expected
c.b
100
# that c.change_b() function isn't changing the externally created variable c.b
c.display_b()
1
#but it changed the internal variable _b