Python编程模式适用于各种引擎(后端)



实现以下行为的最佳方式是什么:我有一个由函数ans = my_interface(args)表示的接口,我有这个函数的几个实现,我想通过设置参数来允许用户选择其中一个实现。

显而易见的解决方案是使每个实现成为具有相同接口的函数,并在my_interface中处理参数,并根据其值调用其中一个。如果我想扩展,我需要添加一个具有新引擎实现的新函数,并更改my_interface以处理新引擎的名称。我必须注意这里的正确界面。我不认为这是最聪明的方式。

我也会附上一个关于这本书的链接或对此事的讨论。例如,我在Keras中发现了类似的功能,它可以使用Tensorflow或PyTorch后端。有人知道它是如何实现的吗?

如果你不想使用类和设计模式,你可以尝试这样的方法:

def _my_interface_engine_A():
print("engine A")
return 0
def _my_interface_engine_B():
print("engine B")
return 1
def _my_interface_engine_C():
print("engine C")
return 2
def my_interface(*args, **kwargs):
engine = kwargs.pop("engine", "A")  # A is the default engine
return globals()[f"_my_interface_engine_{engine}"](*args, **kwargs)
>>> print(my_interface())
engine A
0
>>> print(my_interface(engine="B"))
engine B
1

如果添加另一个接口,只需将函数命名为_my_interface_engine_X,并保持my_interface的函数不变。my_interface充当其他接口的代理。

最新更新