Python 3.x 如果条件为“详细”;如果不是hasattr(self,';&#uu total';):";

Python 3.x 如果条件为“详细”;如果不是hasattr(self,';&#uu total';):";,python-3.x,Python 3.x,我遵循“流畅的Python”学习函数和设计模式: 第六章 在这里设置if条件的目的是什么?我想如果: def total(self): return sum(item.total() for item in self.cart) 我错过的关键点是什么?您能提供一些提示吗?如果您多次调用total会发生什么?如果self.cart没有改变,那么您就不需要重新计算总数,这可能是一项昂贵的操作 您正在检查是否已存储该值。如果没有,则计算它,如果有,则只返回存储的值而不重新计算

我遵循“流畅的Python”学习函数和设计模式:

第六章

在这里设置if条件的目的是什么?我想如果:

    def total(self):
        return sum(item.total() for item in self.cart)

我错过的关键点是什么?您能提供一些提示吗?

如果您多次调用
total
会发生什么?如果
self.cart
没有改变,那么您就不需要重新计算总数,这可能是一项昂贵的操作

您正在检查是否已存储该值。如果没有,则计算它,如果有,则只返回存储的值而不重新计算

顺便说一句,我希望在这里你的生活会很困难,因为
\uu total
开头有双下划线。您可能想考虑切换到一个下划线。

    def total(self):
        if not hasattr(self, '__total'):
            self.__total = sum(item.total() for item in self.cart)
        return self.__total
    def total(self):
        return sum(item.total() for item in self.cart)