Ответ 1
Это соглашение об именах для частных переменных. См. 9.6, частные переменные: http://docs.python.org/tutorial/classes.html#private-variables
Мы знаем, что в классе функции, начинающиеся с __function__
, не импортируются при использовании:
from module import *
Кто-то спросил, что такое _variable
? У меня никогда не было никого.
Они существуют? Является ли это понятием переменной, к которой нельзя получить доступ с помощью объекта класса или чего-то еще?
Это соглашение об именах для частных переменных. См. 9.6, частные переменные: http://docs.python.org/tutorial/classes.html#private-variables
Имя переменной, начинающееся с подчеркивания, является сильным намеком на то, что эту переменную следует рассматривать как конфиденциальную.
Прочитайте http://docs.python.org/tutorial/classes.html#private-variables
Пример стоит 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