Вам нужно self
:
self.__private()
К классам в Python нужно привыкнуть, если вы переходите с C # / C ++ / Java, как это выглядит на самом деле.Это, вероятно, подрывает «питонический» способ формулировки вещей, но вы можете думать об этом так (это помогло мне):
Каждый класс определяет пространство имен, определенное изнутри себя как self
и извнепо имени экземпляра этого класса.«Частные» вещи с двумя подчеркиваниями искажаются, так что извне вы должны вызывать их по специальному имени, но изнутри вы можете просто использовать self.__private()
.
Как упоминал Джо в своем комментарии, обычные частные переменныекак правило, просто имя с одним подчеркиванием, двойное подчеркивание искажает его, поэтому наследование может работать без конфликтов имен в подклассах.В Python нет защиты конфиденциальности, это просто соглашение, которое гласит, что нельзя использовать закрытую переменную вне класса.
Как упоминал Томас, self
также является соглашением.Для любого метода (функции, объявленной как часть класса) экземпляр, к которому вызывается метод, является первым передаваемым параметром. Вы также можете легко сделать это:
def __private(randomText):
print "Hey man! This is private!"
def public(otherRandomText):
otherRandomText.__private()
print "I don't care if you see this!"
Однако, если выСделайте так, чтобы дух логики и хороший стиль программирования преследовали вас и ваших потомков всю вечность.(self
гораздо предпочтительнее).
Любые питонисты хотят исправить / объяснить дальше?