Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Частные аттрибуты 
V
    Опции темы
Lazin
Дата 9.1.2008, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 2
Всего: 154



такой пример:
Код

class Base:
    def __init__(self):
        self.__attr = []

class Derived(Base):
    def __init__(self):
        Base.__init__()

    def Add(self, p):
        self.__attr.append(p)


так вот, при вызове метода Add происходит ошибка, так как частные атрибуты нельзя использовать за пределами класса в котором они определены. Но иногда хочется определить аттрибут общий для всей иерархии, но что-бы он был частным, а писать self._Base__attr как-то уж слишком...
PM MAIL Skype GTalk   Вверх
pythonwin
Дата 9.1.2008, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



Lazin, это очень старая тема - посмотри в поисковиках. 
PS частных защищенных аттрибутов не существует в питоне - можно настроить через __getattr__, __setattr__, __getitem__, но и это можно обойти.


Это сообщение отредактировал(а) pythonwin - 9.1.2008, 15:28
PM WWW GTalk Jabber   Вверх
Lazin
Дата 9.1.2008, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 2
Всего: 154



так и знал, что тема избитая...
пока-что делал атрибуты открытыми, но это как-то не очень...  smile 
PM MAIL Skype GTalk   Вверх
Daevaorn
Дата 14.1.2008, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 9
Всего: 70



В питоне принято, что атрибуты начинающиеся с двух подчеркиваний это private, c одним proteсted. Но если первое котролируется интерпретатором, то второе нет. А вообще это дело не очень нужно в питоне.

Это сообщение отредактировал(а) Daevaorn - 15.1.2008, 21:31
PM MAIL WWW   Вверх
Lazin
Дата 15.1.2008, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 2
Всего: 154



Еще один вопрос..
я обычно создаю атрибуты вот так:
Код

def __init__(self):
    self.myattr = []

привычка уже выработалась, но не знаю насколько правильно так делать
Цитата(Daevaorn @  14.1.2008,  19:32 Найти цитируемый пост)
В питоне приянто, что атрибуты начинающиеся с двух подчеркиваний это private, c одним proteсted. 

Цитата(Daevaorn @  14.1.2008,  19:32 Найти цитируемый пост)
А вообще это дело не очень нужно в питоне. 

в принципе для языка с динамической типизацией, это действительно не очень нужно
PM MAIL Skype GTalk   Вверх
setq
Дата 15.1.2008, 21:12 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Lazin @  15.1.2008,  10:55 Найти цитируемый пост)
def __init__(self):
    self.myattr = []


Да, это общепринято.
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0522 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.