当你应该从函数中返回一些内容以及何时应该将结果设置为变量(self.result)时,是否有任何好的规则或做法?
假设您的课程主要目标是进行一些计算,可能是这样的:
class Calculations:
def __init__(var1, var2, var3):
self.var1 = var1
self.var2 = var2
self.var3 = var3
def calc1(self):
self.result1 = self.var1 + self.var2
def calc2(self):
self.result2 = self.var2 + self.var3
def final_calc(self):
self.calc1()
self.calc2()
return self.result1 / self.result2
if __name__ == '__main__':
calcObject = Calculations(10, 15, 20)
result = calcObject.final_calc()
这被认为是非常糟糕的做法吗?我同意在这个具体的例子中没有多大意义,但随着计算变得越来越复杂,我在几个其他函数中使用了一个函数的结果和变量 - 我发现自己在两个函数之间来回传递大量变量功能
答案 0 :(得分:4)
要确定方法是否应将数据存储在属性和/或return
中,请使用一些启发式方法:
set_foo(...)
这样的方法可能不会产生任何新值,可能是get_foo()
或calculate()
之类的方法。您是否在方法之间存在逻辑依赖关系?对于final_calc
,您必须在calc1
和calc2
可用之前先致电result1
和result2
。这些方法调用与这些属性之间没有明显的联系。这样会更明确,更容易出错:
def final_calc(self):
result1 = self.calc1()
result2 = self.calc2()
return result1 / result2
你甚至可以自由地写下return self.calc1() / self.calc2()
。
所有应存在的属性都应在__init__
中声明,方法只应更改这些属性的值。调用方法后,您的对象不应突然发芽新属性。