Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 9, 2011 12:22:50

pyOut
От:
Зарегистрирован: 2006-07-16
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

Приватные поля и методы класса

Слышал что есть отличия в приватности полей и методов если одни начинаеются с ‘_’(1 подчеркивание) а другие ‘__’(2 подчеркивания). Так в чем же отличия?



Офлайн

#2 Авг. 9, 2011 14:00:52

cutwater
От:
Зарегистрирован: 2009-01-08
Сообщения: 444
Репутация: +  19  -
Профиль   Отправить e-mail  

Приватные поля и методы класса

Отличие в том что к именам с двумя подчеркиваниями применяется name mangling, подробнее читайте в учебниках.



Офлайн

#3 Авг. 9, 2011 14:06:54

atomAltera
От:
Зарегистрирован: 2011-07-27
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

Приватные поля и методы класса

C двумя подчёркиваниями это так сказать системные методы, а точнее методы перегрузки операций. Они вызываются автоматически когда объект участвует в какой-нить операции. Ну например a вызывает a.__getitem__(x), а с одинарным подчёркиванием - это условно приватные методы или переменные.



Офлайн

#4 Авг. 9, 2011 16:20:18

Enchantner
От:
Зарегистрирован: 2009-02-11
Сообщения: 442
Репутация: +  0  -
Профиль   Отправить e-mail  

Приватные поля и методы класса

cutwater
Отличие в том что к именам с двумя подчеркиваниями применяется name mangling, подробнее читайте в учебниках.
Не совсем так. Для __init__ того же искажения не происходит, а вот для какого-нибудь кастомного __get_item (когда два подчеркивания только в начале) - да.



Офлайн

#5 Авг. 9, 2011 16:25:49

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Приватные поля и методы класса

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

..bw



Офлайн

#6 Авг. 9, 2011 17:05:05

atomAltera
От:
Зарегистрирован: 2011-07-27
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

Приватные поля и методы класса

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

..bw
Да, я плохо выразился.



Офлайн

#7 Авг. 9, 2011 21:10:26

cutwater
От:
Зарегистрирован: 2009-01-08
Сообщения: 444
Репутация: +  19  -
Профиль   Отправить e-mail  

Приватные поля и методы класса

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__ и прочее это заслуга нижеотписавшихся.



Отредактировано (Авг. 9, 2011 21:13:17)

Офлайн

#8 Авг. 9, 2011 22:02:14

Enchantner
От:
Зарегистрирован: 2009-02-11
Сообщения: 442
Репутация: +  0  -
Профиль   Отправить e-mail  

Приватные поля и методы класса

cutwater
Ну, я вас правильно в итоге понял :)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version