Одним из необычных аспектов ООП-модели Python является механизм инкапсуляции. По сути, Python предполагает, что программисты не делают плохих вещей, и поэтому он не делает никаких попыток защитить закрытые переменные-члены или методы.
Он работает, искажая имена членов, которые начинаются с двух подчеркиваний и заканчиваются менее чем двумя. Такие идентификаторы повсеместно изменяются, так что к ним добавляется имя класса с дополнительным подчеркиванием перед этим. таким образом:
class foo:
def public(self):
return self.__private()
def __private(self):
return 5
print foo().public()
print foo()._foo__private()
имена, начинающиеся и заканчивающиеся двумя (или более) подчеркиваниями, не искажены, поэтому __init__
метод, который python использует для конструирования новых экземпляров, остается один.
Вот ссылка , объясняющая это более подробно.