这是一个关于一个干净的、pythonic 的方式来处理一些不同的实例方法的问题。
我有一个类,根据某些输入,它的运作方式略有不同。差异似乎不足以证明产生全新课程的合理性。我必须将该类与几个数据“提供者”之一进行接口。当我介绍一本字典时,我以为我很聪明:
self.interface_tools={'TYPE_A':{ ... various ..., 'data_supplier':self.current_data},
'TYPE_B':{ ... various ..., 'data_supplier':self.predicted_data} }
然后,作为类初始化的一部分,我有一个输入“source_name”,我做......
# ... various ....
self.data_supplier = self.interface_tools[source_name]['data_supplier']
self.current_data
并且self.predicted_data
需要相同的输入参数,所以在调用方法时,我不必区分它们。我可以打电话
new_data = self.data_supplier(param1)
但是现在我需要连接一个新的数据源——称之为“TYPE_C”——它需要更多的输入参数。有很多方法可以做到这一点,但我想不出什么是非常干净的。例如,我可以将新参数添加到旧的 data_suppliers 而从不使用它们,所以调用看起来像
new_data = self.data_supplier(param1,param2,param3)
但我不喜欢那样。我可以添加一个 if 块
if self.data_source != 'TYPE_C':
new_data = self.data_supplie(param1)
else:
new_data = self.data_c_supplier(param1,param2,param3)
但是避免这样的 if 块正是我最初想用我想出的那本字典做的事情。
所以结果是:我有一些“data_supplier”例程。现在我的项目已经扩展,它们有不同的输入列表。但我希望我的班级能够尽可能一视同仁地对待他们。有任何想法吗?谢谢。