python - 在 Python 中使用空模式的推荐方法是什么?

标签 python design-patterns mocking

有一天,我在编码时突然发现自己正在努力解决一个简单的问题,但解决方案却很困惑(至少以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/

相关文章:

python 夏娃 : Add _id value in auth_field with event hook

python - 训练水模型时如何抑制 "Build Progress"条?

design-patterns - 在应用程序中推送数据更改与拉取数据更改

ios - 我怎样才能改进这个涉及 NSDate 比较的实现?

ruby-on-rails - 在 Rails 中模拟网络响应

java - 在mockito中检索模拟对象名称

python - 从字符串中提取坐标

python - 如何使用 dask 映射列

java - 设计模式来处理特定于用户的版本显示

java - 等价于 EasyMock 中的 LastCall.IgnoreArguments