回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我正在开发一个科学图书馆,在那里我将定义时域和频域中的向量函数(通过FFT链接)。我为频域中的向量公式创建了一个类,现在我想为时域定义一个相同的类</p>
<p>我希望在时域中,类函数——尽管与它们的频域孪生函数相同——有一个名为<code>t</code>的参数,而不是<code>omega</code><strong>在保持可读性的同时,是否有更简单的方法来实现这一点,而不是重复定义每个方法?</strong></p>
<p>我的代码:<br/>
<em>(注意:我的类要复杂得多,不能只使用函数作为<code>formula.x_func(...)</code>-包括一些检查等。另外,实际上有6个组件。)</em></p>
<pre><code>class VecFormula(object):
pass
class FreqFormula(VecFormula):
def __init__(self, x_func, y_func, z_func):
self.x_func = x_func
self.y_func = y_func
self.z_func = z_func
def x(self, x, y, z, omega, params):
return self.x_func(x, y, z, omega, params)
def y(self, x, y, z, omega, params):
return self.y_func(x, y, z, omega, params)
def z(self, x, y, z, omega, params):
return self.z_func(x, y, z, omega, params)
def component(self, comp, x, y, z, omega, params):
if comp == 'x':
return self.x(x, y, z, omega, params)
elif comp == 'y':
return self.y(x, y, z, omega, params)
elif comp == 'z':
return self.z(x, y, z, omega, params)
else:
raise ValueError(f'invalid component: {comp}')
class TimeFormula(FreqFormula):
"same as FreqFormula, but the omega parameter is renamed to t"
def x(self, x, y, z, t, params):
return super(TimeFormula, self).x(x, y, z, t, params)
def y(self, x, y, z, t, params):
return super(TimeFormula, self).y(x, y, z, t, params)
def z(self, x, y, z, t, params):
return super(TimeFormula, self).z(x, y, z, t, params)
def component(self, comp, x, y, z, t, params):
return super(TimeFormula, self).component(x, y, z, t, params)
</code></pre>