如何在 Python 中应用 Closed-Open 和 Inversion of Control 原则?

How to apply Closed-Open and Inversion of Control principles in Python?

现在正在构建一个新的应用程序,并且在阅读 Uncle Bob 的 Clean Architecture 书后遵循的 "Closed-Open" 和 "Inversion of Control" 原则的实现部分苦苦挣扎。

如何在 Python 中实现它们?

通常,这两个原则齐头并进,并在 UML 中描述为 Interface 从 module/package A 到 B 的反向控制。

我很困惑,因为:

因此,如您所见,我非常困惑并且很难根据我的设计进行编程。我想出了。你能帮帮我吗?

您只需传递一个实现您需要它实现的方法的对象。

是的,没有 "Interface" 来定义这些方法必须是什么,但这就是 python.

中的方式

你一直在传递必须是列表、映射、元组或其他任何参数的参数,其中 none 是类型检查的。您可以编写代码来调用这些东西上的任何内容,并且 python 在实际执行该代码之前不会注意到任何类型的问题。

当您需要这些参数来实现您正在使用的任何 IoC 接口时,情况完全相同。请务必在评论中详细说明要求。

是的,这很危险。这就是为什么对于具有复杂接口的大型系统,我们更喜欢静态类型语言。