Получатель с побочным эффектом

Я создаю класс, объекты которого инициализируются с помощью куча XML-кода. Класс имеет возможность извлекать различные параметры из этого XML и кэшировать их внутри переменных состояния объекта. Потенциальное количество этих параметров велико и, скорее всего, большинство из них пользователю не понадобится. Поэтому я решил провести «ленивую» инициализацию.

В следующем тестовом примере таким параметром является заголовок . Когда пользователь пытается получить к нему доступ в первый раз, функция геттера анализирует XML, правильно инициализирует переменную состояния и возвращает ее значение:

class MyClass(object):     
    def __init__(self, xml=None):
        self.xml  = xml
        self.title = None

    def get_title(self):
        if self.__title is None:
            self.__title = self.__title_from_xml()
        return self.__title

    def set_title(self, value):
        self.__title = value

    title = property(get_title, set_title, None, "Citation title")

    def __title_from_xml(self):
        #parse the XML and return the title
        return title         

Это выглядит красиво и отлично работает для меня. Однако меня немного беспокоит тот факт, что функция получения на самом деле является функцией установки в том смысле, что она имеет очень значительный побочный эффект на объект. Это законное беспокойство? Если так, как мне ее решить?

13
задан Boris Gorelik 19 January 2011 в 19:16
поделиться