<p>问题是在这里使用继承在面向对象编程方面是相当奇怪的。在定义类时,您真的需要定义整个转换链吗?你知道吗</p>
<p>但最好还是忘了面向对象编程,这个任务不是面向对象编程的。只需定义转换函数:</p>
<pre><code>def get_pipeline(*functions):
def pipeline(x):
for f in functions:
x = f(x)
return x
return pipeline
p = get_pipeline(lambda x: x * 2, lambda x: x + 1)
print p(5)
</code></pre>
<p>更简短的版本如下:</p>
<pre><code>def get_pipeline(*fs):
return lambda v: reduce(lambda x, f: f(x), fs, v)
p = get_pipeline(lambda x: x * 2, lambda x: x + 1)
print p(5)
</code></pre>
<p>这是一个面向对象的解决方案。与前一个相比,它相当笨拙:</p>
<pre><code>class Transform(object):
def __init__(self, prev=None):
self.prev_transform = prev
def transformation(self, x):
raise Exception("Not implemented")
def transformData(self, x):
if self.prev_transform:
x = self.prev_transform.transformData(x)
return self.transformation(x)
class TransformAdd1(Transform):
def transformation(self, x):
return x + 1
class TransformMul2(Transform):
def transformation(self, x):
return x * 2
t = TransformAdd1(TransformMul2())
print t.transformData(1) # 1 * 2 + 1
</code></pre>