![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| pythonwin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: 14 Всего: 36 |
Всем привет!
подскажите как назвается словарь или список - атрибут объекта, который содержит хотя бы имена public атрибутов объекта-класса? для private атрибутов это __dict__ и через него можно обращаться к значению private-атрибута, как self.__dict__['name_attr'] |
|||
|
||||
| _Viper_ |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 8.11.2006 Репутация: 10 Всего: 11 |
__dict__ содержит не только private аттрибуты, но и public.
|
|||
|
||||
| pythonwin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: 14 Всего: 36 |
спасибо! PS глупый вопрос - сам нашел |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 9 Всего: 70 |
На самом деле поведение __dict__ несколько странно на мой взгляд
|
|||
|
||||
| pythonwin |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: 14 Всего: 36 |
Daevaorn, а вот так?
просто нужно имя private переменной описывать __имя__ Г.Россум и др. - Язык программирования Python
|
||||
|
|||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 9 Всего: 70 |
я в reference читал про __name и если вызвать вне класса а.__bar_private, то эксепшен вылезает. Так что тут вроде всё нормально. Я не понимаю другого, почему в f.__dict__ нет bar_in_scope?
Это оно, да? Это сообщение отредактировал(а) Daevaorn - 2.2.2007, 15:20 |
|||
|
||||
| pythonwin |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: 14 Всего: 36 |
к сожелению у меня не стоят часть шрифтов - поэтому дал только заголовок
Traceback (most recent call last): File "<string>", line 74, in run_nodebug File "<Module1>", line 11, in ? AttributeError: Foo instance has no attribute '__bar_private' а вот так не ругается:
|
||||
|
|||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 9 Всего: 70 |
||||
|
||||
| J2A |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 17.11.2005 Где: Омск Репутация: 16 Всего: 18 |
Ну __такие_переменные__ -- "магические" и их не рекомендуется на право и налево использовать.
--------------------
Be easy, stay cool |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 9 Всего: 70 |
точно Опытным путем определил, что bar_in_scope находится в f.__class__.__dict__. После первого же self.bar_in_cope = ... - она попадает в f.__dict__. При этом туда она идет с только что присвоиным значением, в __class__.__dict__ остается с первоначальным. Интересно. |
|||
|
||||
| pythonwin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: 14 Всего: 36 |
||||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 9 Всего: 70 |
||||
|
||||
| _Viper_ |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 8.11.2006 Репутация: 10 Всего: 11 |
bar_in_cope - в твоём случае аттрибут класса, а не обьекта. А после присваивания создаётся аттрибут обьекта. Для изменения аттрибута класса к нему надо обрашаться так: self.__class__.bar_in_cope = .... |
|||
|
||||
| pythonwin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: 14 Всего: 36 |
ну и использую их там где нужны защищенные атрибуты, чтобы использовать только в самом классе или в потомках |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 9 Всего: 70 |
||||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Python: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |