吸气剂有副作用


问题内容

我创建一个类,该类的对象使用一堆XML代码初始化。该类具有从XML中提取各种参数并将其缓存在对象状态变量中的能力。这些参数的潜在数量很大,很可能用户将不需要它们中的大多数。这就是为什么我决定执行“惰性”初始化的原因。

在以下测试案例中,这样的参数是title。当用户首次尝试访问它时,getter函数将解析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

这看起来不错,对我来说很好。但是,我对getter函数实际上是一个“
setter”函数感到不安,因为它对对象具有非常显着的副作用。这是合理的关注吗?如果是这样,我该如何解决?


问题答案:

尽管吸气剂肯定会产生副作用,但传统上这并不是人们认为不良的副作用。由于getter总是返回相同的东西(禁止状态的任何中间变化),因此它没有用户可见的副作用。这是属性的典型用法,因此无需担心。