Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > Частные аттрибуты


Автор: Lazin 9.1.2008, 12:57
такой пример:
Код

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 как-то уж слишком...

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

Автор: Lazin 9.1.2008, 15:50
так и знал, что тема избитая...
пока-что делал атрибуты открытыми, но это как-то не очень...  smile 

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

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

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

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

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

в принципе для языка с динамической типизацией, это действительно не очень нужно

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


Да, это общепринято.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)