Форум сайта python.su
Слышал что есть отличия в приватности полей и методов если одни начинаеются с ‘_’(1 подчеркивание) а другие ‘__’(2 подчеркивания). Так в чем же отличия?
Офлайн
Отличие в том что к именам с двумя подчеркиваниями применяется name mangling, подробнее читайте в учебниках.
Офлайн
C двумя подчёркиваниями это так сказать системные методы, а точнее методы перегрузки операций. Они вызываются автоматически когда объект участвует в какой-нить операции. Ну например a вызывает a.__getitem__(x), а с одинарным подчёркиванием - это условно приватные методы или переменные.
Офлайн
cutwaterНе совсем так. Для __init__ того же искажения не происходит, а вот для какого-нибудь кастомного __get_item (когда два подчеркивания только в начале) - да.
Отличие в том что к именам с двумя подчеркиваниями применяется name mangling, подробнее читайте в учебниках.
Офлайн
atomAltera, давай так, сначала разбираемся сами, а потом учим молодёж?
self.__ass__ и self.__ass это всё же разные вещи, и как раз последнее определение и является так сказать приватным.
..bw
Офлайн
bwДа, я плохо выразился.
atomAltera, давай так, сначала разбираемся сами, а потом учим молодёж?
self.__ass__ и self.__ass это всё же разные вещи, и как раз последнее определение и является так сказать приватным.
..bw
Офлайн
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
Отредактировано (Авг. 9, 2011 21:13:17)
Офлайн
cutwater
Ну, я вас правильно в итоге понял :)
Офлайн