擅长:python、mysql、java
<p>在这种情况下,您希望有一个链式调用类型,但是不能返回<code>self</code>,因为<code>order_by()</code>不会作用于<code>filter_by()</code>正在创建的过滤结果集,而是作用于原始的<code>cct</code>对象。你知道吗</p>
<p>相反,每个方法都应该返回一个结果集,该结果集还包含用于添加过滤等的方法</p>
<p>另一方面,Python已经为其中大部分内置了:</p>
<pre><code>filter(filter_fun, sorted(cct.get_list(), key=keyfun))
</code></pre>
<p>因此,这样做的唯一原因是,如果您实际构建的查询被延迟到对库的调用或服务调用,就像ORM一样。在这种情况下,您应该构建一个包含过滤和排序命令的对象链并返回它,然后在调用时解析和执行该链。你知道吗</p>
<p>在上述函数中返回<code>self</code>在任何情况下都没有什么用处。你知道吗</p>
<p>当然,除非您在每个调用中实际修改self,但如果您这样做,您的链式调用API将很混乱。改变自我意志
表示对象保留的状态不是对象的一部分,而是调用的一部分。例如,您可以让<code>.filter_by()</code>在对象上设置一个过滤器,由<code>.get_list()</code>使用。但在创建新的<code>.get_list()</code>之前,必须重置该筛选器,否则该筛选器仍将处于活动状态。你知道吗</p>
<p>很难使用而且易碎。你知道吗</p>