首页 > 解决方案 > 如何停止对 python 抽象方法的懒惰?

问题描述

我发现我最终对接口(或者实际上是 python 抽象方法)变得“懒惰”。假设我有两个第三方服务,我希望能够将用户列表同步到两个商店。我还希望以后能够添加可以轻松进入的商店。

我为每个商店编写了处理该商店的 API 细节的类,然后我想给每个商店一个“sync_users”命令。

在运行时,我会知道我正在调用哪个存储,因此 sync_users 命令在所有类之间是通用的。但是,StoreA 在我运行它的sync_users 时需要知道X、Y 和Z,而StoreB 在我执行它的sync_users 时需要知道1、2 和3。将来,StoreC 可能需要完全不同的东西。

我通常最终会做类似的事情:

@abstractmethod
def sync_users(self, users: List, params: Dict):
  pass

作为一种抽象方法,然后只制作params一个包含每个商店所需参数的自由形式的 dict(或更糟的是 **kwargs )。所以,就像我说的,这感觉超级懒惰和臭,并且违背了定义界面的全部意义。

我可以看到的另一个选项是使每个类初始化都采用所需的参数,以便在执行 sync_users 时不需要这些参数:

class StoreA:
  def __init__(self, param_a, param_b, param_c):
    pass
  
  def sync_users(self, users: List):
    pass

但我不知道这样更好吗?

任何关于如何以更清洁的方式完成此任务的模式指针(不需要特定于 Python)将不胜感激。

标签: pythoninterface

解决方案


推荐阅读