有一天,我在编码时突然发现自己正在努力解决一个简单的问题,但解决方案却很困惑(至少以Pythonic的方式)。
代码应该只是下载一些文件,为此,它会调用一些 DownloadController
并向其传递 callback
以便接收诸如 init< 之类的事件
、进度
、错误
和成功
。
但是,我的代码不需要所有这些事件。想到这里我想到了一些解决方案
- 将
DownloadController
更改为默认callback=None
并检查它,以便在这种情况下忽略发送事件 - 拥有
NullCallbackImpl
,它遵循回调接口(interface),但不执行任何操作(只需在每个事件上传递
)
第一种方法不喜欢它,因为代码会有点困惑并且设计不好。
所以,我坚持第二种方法......问题:
- 如果有一个
null_callback = mock.Mock()
会有多好(也许是“多糟糕”)? (使用来自 Michael Foord 的 python 模拟库)- 是否有任何库可以执行此操作?
- 或者我应该坚持创建一个
NullCallbackImpl
使用简单的pass
实现每个方法?
最佳答案
您发现了 DownloadController 的一个新用例 - “让用户自定义回调”。听起来您可以控制 Downloadcontroller 源。它可以定义一个 DownloadCallback 类,将事件公开为方法,但对它们不执行任何操作。 Controller 将接受 None(不执行任何操作)或任何实现 DownloadController 接口(interface)的内容。
我认为对真实代码使用模拟有点奇怪......它创建了另一个需要满足模块用户的依赖关系。
关于python - 在 Python 中使用空模式的推荐方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17479480/