python - 如何停止对 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)将不胜感激。
解决方案
推荐阅读
- node.js - Angular PWA 应用程序获得 504(网关超时)调用 Node JS/Express API,但仅在从设备运行时
- c# - .NET 数据库中的日期格式,因为 JSON 转换
- wxpython - 我无法理解大代码
- python - 当 n_jobs > 1 时,Joblib 看不到 cython 模块
- c++ - 头文件不会编译
- c++ - 使用 memcpy 将矢量数据复制到 wstring 的正确方法
- android - Cordova - Config.xml - 资源文件指令不起作用
- amazon-web-services - Aws ec2 实例已损坏
- javascript - 刷新页面时出现 404 错误 - 部署在 Heroku 上的 React App
- ruby-on-rails - Rails:模块中的操作之前是否会覆盖类中的操作?