Python 是否需要使用';如果';这里的声明?

Python 是否需要使用';如果';这里的声明?,python,fluent,Python,Fluent,Fluent Python的示例6-3定义了一个私有变量self.\u total,并在赋值前使用if语句,如下所示: if not hasattr(self, '__total'): self.__total = sum(item.total() for item in self.cart) return self.__total 为什么不使用语句return self.\uu total=sum(self.cart中的item.total()

Fluent Python的示例6-3定义了一个私有变量
self.\u total
,并在赋值前使用
if
语句,如下所示:

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

为什么不使用语句
return self.\uu total=sum(self.cart中的item.total())
来进行分配?

有一点不同,那就是

return self.__total = sum(item.total() for item in self.cart)
覆盖私有变量total holds之前的任何值

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

如果在…之前赋值,将返回上一个值。

这似乎是一种保护,只需计算一次,不需要修改它,或者为了性能,请确认您的答案。我知道你的意思,但为什么不让变量在每次调用类时都被重写呢?代码如下:您可能不想覆盖total的值,因为它可能包含一些以前计算过的有用信息。即使没有,另一个很好的解释是,您可能不想一次又一次地重新计算total的值。在这种情况下,这似乎是不必要的,但如果您正在进行一些时间复杂的计算,您可能希望返回以前的计算值,而不是再次执行所有这些操作。