我创建了一个类,它的对象是用初始化的
一堆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确实会产生副作用,但这并不是人们通常认为的不良副作用。因为getter总是返回相同的东西(除非状态发生任何干预性的更改),所以它没有用户可见的副作用。这是一种典型的属性用法,因此没有什么可担心的。

关于python - setter/getter 有副作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4739597/

10-13 02:16