为什么django ORM的`save`方法不返回保存的对象?
对这个设计决定背后的推理有任何见解吗?在我看来,obj.save()返回某物仅具有好处(如方法链接),而没有缺点。
-
在Python中,通常认为具有主要影响现有对象而不返回自身的函数是一种好习惯。例如,
sorted(yourlist)
返回排序后的列表,但yourlist.sort()
对列表进行原位排序,不返回任何内容。在一行上执行具有副作用(而不是侧重于返回值的无副作用功能)的多个操作并不是一个好习惯。该代码在行数方面将更加紧凑,但是由于重要的副作用可能埋在链的中间,因此将很难阅读。如果要使用方法链接,请在链的开头使用没有副作用的函数,然后再有一个具有副作用的函数(如.save()结尾)。
换句话说,在方法链中,链的开始是输入,链的中间转换了输入(在树上导航,对输入进行排序,更改字符串的大小写等),并在输入的末尾进行了转换。链是起到副作用作用的功能部分。如果您将带有副作用的方法埋在链的中间,那么将不清楚您的方法链实际上在做什么。