吸气剂有副作用
问题内容:
我创建一个类,该类的对象使用一堆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总是返回相同的东西(禁止状态的任何中间变化),因此它没有用户可见的副作用。这是属性的典型用法,因此无需担心。