Найти - Пользователи
Полная версия: Приватные поля и методы класса
Начало » Python для новичков » Приватные поля и методы класса
1
pyOut
Слышал что есть отличия в приватности полей и методов если одни начинаеются с ‘_’(1 подчеркивание) а другие ‘__’(2 подчеркивания). Так в чем же отличия?
cutwater
Отличие в том что к именам с двумя подчеркиваниями применяется name mangling, подробнее читайте в учебниках.
atomAltera
C двумя подчёркиваниями это так сказать системные методы, а точнее методы перегрузки операций. Они вызываются автоматически когда объект участвует в какой-нить операции. Ну например a вызывает a.__getitem__(x), а с одинарным подчёркиванием - это условно приватные методы или переменные.
Enchantner
cutwater
Отличие в том что к именам с двумя подчеркиваниями применяется name mangling, подробнее читайте в учебниках.
Не совсем так. Для __init__ того же искажения не происходит, а вот для какого-нибудь кастомного __get_item (когда два подчеркивания только в начале) - да.
bw
atomAltera, давай так, сначала разбираемся сами, а потом учим молодёж?
self.__ass__ и self.__ass это всё же разные вещи, и как раз последнее определение и является так сказать приватным.

..bw
atomAltera
bw
atomAltera, давай так, сначала разбираемся сами, а потом учим молодёж?
self.__ass__ и self.__ass это всё же разные вещи, и как раз последнее определение и является так сказать приватным.

..bw
Да, я плохо выразился.
cutwater
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
cutwater
Ну, я вас правильно в итоге понял :)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB