【发布时间】:2016-04-14 01:04:10
【问题描述】:
我有大量源自 Function 类的类层次结构(例如,SineFunction 将是一个孩子),并且它们都实现了 __call__ 方法以及其他方法(例如派生或更多专门的数值方法)。
根据输入类型向这些__call__ 方法中的每一个添加通用逻辑的最简洁方法是什么?形式上,我想要类似的东西
def __call__(self,x):
if isinstance(x,Distribution):
return FunctionDistribution(x,self)
else:
# Go back to previous logic
对于Function 的每个子类。我可以在__call__ 的每个实现中添加super(),但这会很痛苦。有什么更容易实现的吗?
【问题讨论】:
-
FunctionDistribution每个版本都一样吗?还是会因不同的__call__方法而有所不同?总是有一个论点吗? -
不确定它是否适用于您的情况,但您可能想查看single dispatch generic functions (introduced in 3.4),您可以在其中定义具有通用实现的全局函数,以及特定类型的特化。它可能会或可能不会与您当前基于“函子”的设计很好地吻合,但我认为它正在检查工作。
标签: python python-3.x inheritance design-patterns composition