| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Python: Общие вопросы > словарь или список public атрибутов объекта-класса |
| Автор: pythonwin 2.2.2007, 14:12 |
| Всем привет! подскажите как назвается словарь или список - атрибут объекта, который содержит хотя бы имена public атрибутов объекта-класса? для private атрибутов это __dict__ и через него можно обращаться к значению private-атрибута, как self.__dict__['name_attr'] |
| Автор: _Viper_ 2.2.2007, 14:30 |
| __dict__ содержит не только private аттрибуты, но и public. |
| Автор: pythonwin 2.2.2007, 14:34 |
спасибо! PS глупый вопрос - сам нашел |
| Автор: Daevaorn 2.2.2007, 14:51 | ||
На самом деле поведение __dict__ несколько странно на мой взгляд
|
| Автор: pythonwin 2.2.2007, 15:14 | ||||
Daevaorn, а вот так?
просто нужно имя private переменной описывать __имя__ Г.Россум и др. - Язык программирования Python
|
| Автор: Daevaorn 2.2.2007, 15:19 | ||
я в reference читал про __name и если вызвать вне класса а.__bar_private, то эксепшен вылезает. Так что тут вроде всё нормально. Я не понимаю другого, почему в f.__dict__ нет bar_in_scope?
Это оно, да? |
| Автор: Daevaorn 2.2.2007, 16:26 |
ну это логично. А вот так вообще не private получается |
| Автор: J2A 2.2.2007, 16:42 |
| Ну __такие_переменные__ -- "магические" и их не рекомендуется на право и налево использовать. |
| Автор: Daevaorn 2.2.2007, 16:47 | ||
точно Опытным путем определил, что bar_in_scope находится в f.__class__.__dict__. После первого же self.bar_in_cope = ... - она попадает в f.__dict__. При этом туда она идет с только что присвоиным значением, в __class__.__dict__ остается с первоначальным. Интересно. |
| Автор: pythonwin 2.2.2007, 16:55 | ||
почему? |
| Автор: Daevaorn 2.2.2007, 16:57 |
служебные |
| Автор: _Viper_ 2.2.2007, 17:18 | ||
bar_in_cope - в твоём случае аттрибут класса, а не обьекта. А после присваивания создаётся аттрибут обьекта. Для изменения аттрибута класса к нему надо обрашаться так: self.__class__.bar_in_cope = .... |
| Автор: pythonwin 2.2.2007, 17:27 |
ну и использую их там где нужны защищенные атрибуты, чтобы использовать только в самом классе или в потомках |
| Автор: Daevaorn 2.2.2007, 17:35 |
что в твоём понимании "защищенные"? Они же видны отовсюду! |
| Автор: pythonwin 5.2.2007, 09:25 |
да... вот я дал маху - прошу прощения ;( а как создать атрибуты, которые доступны только изнутри? подскажите, где можно почитать о "защищенных" атрибутах? (в книге Г.Россум "язык программирования python" не нашел) |
| Автор: _Viper_ 5.2.2007, 11:50 | ||
В питоне нет стандартных "защищенных" атрибутов (аналога private в C++). Но в какой-то книге (к сожалению не помню в какой именно |
| Автор: Daevaorn 5.2.2007, 12:05 |
по сути, кроме __name - других вариантов нет |
| Автор: pythonwin 5.2.2007, 12:32 | ||
у Г.Россума описана это, правда в кратце. |