所以我有一组距离函数和相应的计算,比如平均值,比较
我希望能够迭代这些不同的距离来计算它们的值/平均值/值,并使添加新距离变得容易
现在,我通过使用嵌套字典来实现这一点,但是这取决于现有的所有函数以及它们是否正常工作,所以我想知道是否有一种设计模式可以解决这个问题?你知道吗
我的第一个想法是定义需要存在哪些函数以及实现这些函数的类的元类。但是,这样就不会有这些距离类的有意义的实例。 我当时的第二个想法是定义一个Distance类,并将函数作为该类的属性,但这种风格似乎不太好。 第二个想法的例子:
class Distance:
def __init__(self, distf, meanf):
self.distf = distf
self.meanf = meanf
def dist(self, x1,x2):
return self.distf(x1,x2)
def mean(self, xs):
return self.meanf(xs)
d = Distance(lambda x,y: abs(x-y), np.mean)
d.dist(1,2) ##returns 1 as expected
d.dist([1,2]) ## returns 1.5 as expected
这是可行的(而且还加强了函数的存在性/甚至可能是属性),但是如上所述的感觉是相当糟糕的风格。我不打算发布这段代码,它只是为了保持它的干净和组织,如果这是相关的。 我希望问题是明确的,如果没有请不要犹豫评论,我会努力澄清。你知道吗
编辑: -@维克多:一切都应该先定下来。在运行时只应进行选择。 -@abarnert大多是习惯性的,也要限制使用(np.平均值在本例中,需要在没有axis参数的情况下调用),但这应该是不相关的,因为我没有发布这个 -@juanpa会调查的
似乎简单的继承就是你所需要的。 因此,创建一个基类
BaseSpace
,它基本上是一个接口:然后,您只需使用所需函数的所有不同组合继承此接口,在类内部(如果只使用一次)或外部实现方法,并在类定义中分配它们:
由于Python的duck typing方法(也适用于接口定义),您实际上并不需要实际定义的基类,但它有助于显示每个“Space”类的预期内容。你知道吗
相关问题 更多 >
编程相关推荐