pyOut
Авг. 9, 2011 12:22:50
Слышал что есть отличия в приватности полей и методов если одни начинаеются с ‘_’(1 подчеркивание) а другие ‘__’(2 подчеркивания). Так в чем же отличия?
cutwater
Авг. 9, 2011 14:00:52
Отличие в том что к именам с двумя подчеркиваниями применяется name mangling, подробнее читайте в учебниках.
atomAltera
Авг. 9, 2011 14:06:54
C двумя подчёркиваниями это так сказать системные методы, а точнее методы перегрузки операций. Они вызываются автоматически когда объект участвует в какой-нить операции. Ну например a вызывает a.__getitem__(x), а с одинарным подчёркиванием - это условно приватные методы или переменные.
Enchantner
Авг. 9, 2011 16:20:18
cutwater
Отличие в том что к именам с двумя подчеркиваниями применяется name mangling, подробнее читайте в учебниках.
Не совсем так. Для __init__ того же искажения не происходит, а вот для какого-нибудь кастомного __get_item (когда два подчеркивания только в начале) - да.
atomAltera, давай так, сначала разбираемся сами, а потом учим молодёж?
self.__ass__ и
self.__ass это всё же разные вещи, и как раз последнее определение и является
так сказать приватным.
..bw
cutwater
Авг. 9, 2011 21:10:26
Enchantner
Не совсем так. Для __init__ того же искажения не происходит,
Ответ был в контексте именно “приватных” полей.
Private name mangling: When an identifier that textually occurs in a class definition begins with two or more underscore characters and does not end in two or more underscores, it is considered a private name of that class.
http://docs.python.org/reference/expressions.html#atom-identifiersТо что сюда приплели еще и __init__ и прочее это заслуга нижеотписавшихся.
Enchantner
Авг. 9, 2011 22:02:14
cutwater
Ну, я вас правильно в итоге понял :)