<p>要么将<code>_do_atomic_job()</code>分解成一个适当的方法,要么分解它
进入自己的班级似乎是最好的办法。覆盖内部
函数无法工作,因为您无法访问
包含方法。在</p>
<p>你说<code>_do_atomic_job()</code>接受了很多参数,返回了很多值。也许您可以将这些参数中的一些组合成合理的对象:</p>
<pre><code>_do_atomic_job(start_x, start_y, end_x, end_y) # Separate coordinates
_do_atomic_job(start, end) # Better: start/end points
_do_atomic_job(rect) # Even better: rectangle
</code></pre>
<p>如果您不能这样做,并且<code>_do_atomic_job()</code>是相当自包含的,
您可以创建助手类<code>AtomicJobParams</code>和<code>AtomicJobResult</code>。
使用<a href="https://docs.python.org/2.6/library/collections.html" rel="nofollow">^{<cd6>}</a>代替类的示例:</p>
^{pr2}$
<p>最后,如果原子作业是自包含的,您甚至可以将它考虑到
自己的类<code>AtomicJob</code>。在</p>
<pre><code>class AtomicJob:
def __init__(self, a, b, c, d):
self.a = a
self.b = b
self.c = c
self.d = d
self._do_atomic_job()
def _do_atomic_job(self):
...
self.result_1 = 42
self.result_2 = 23
self.result_3 = 443
</code></pre>
<p>总的来说,这更像是一个代码分解问题。力求精瘦
在适当的情况下将工作委托给助手的类。跟随<a href="https://en.wikipedia.org/wiki/Single_responsibility_principle" rel="nofollow">single responsibility principle</a>。如果值属于一起,则将它们打包在一个值类中。在</p>
<p>作为David Miller(著名的Linux内核开发人员)<a href="https://plus.google.com/+DavidMiller/posts/CtPzXPx9HP3" rel="nofollow">recently said</a>:</p>
<blockquote>
<p>If you write interfaces with more than 4 or 5 function arguments, it's
possible that you and I cannot be friends.</p>
</blockquote>