Python 依赖注入框架

53 投票
18 回答
43537 浏览
提问于 2025-04-11 09:30

有没有类似于 Guice 的框架可以在 Python 中使用?(Guice 是一个由谷歌开发的框架,帮助管理程序中的依赖关系。)

18 个回答

11

作为猴子补丁的替代方案,我更喜欢依赖注入(DI)。像这个新兴项目 http://code.google.com/p/snake-guice/ 可能正合适。

或者可以看看Dennis Kempin在08年8月写的博客文章 Python中的依赖注入

21

我喜欢这个简单又整洁的框架。

http://pypi.python.org/pypi/injector/

在Python中,依赖注入这个正式的模式没有其他语言那么有用,主要是因为Python支持关键字参数,容易模拟对象,而且它的动态特性。

不过,有一个框架来帮助这个过程可以减少大型应用中的重复代码。这就是Injector可以发挥作用的地方。它会自动提供关键字参数及其对应的值。另一个好处是,Injector鼓励通过使用模块来编写结构清晰的代码。

虽然它受到Guice的启发,但并不是完全照搬它的API。提供一个符合Python风格的API更重要。

25

Spring Python 是一个基于 Java 的 Spring 框架和 Spring Security 的衍生项目,专门为 Python 设计。这个项目目前包含以下功能:

  • 控制反转(依赖注入) - 你可以使用传统的 XML 配置,或者用 Python 的 @Object 装饰器(类似于 Spring 的 JavaConfig 子项目)来连接各个部分。虽然 @Object 的格式和 Guice 的风格不完全相同(一个是集中式连接,另一个是在每个类中提供连接信息),但它仍然是连接你的 Python 应用的一个有用方法。
  • 面向切面编程 - 在处理事务、安全和缓存等方面,可以使用拦截器来实现横向编程,而不是传统的纵向面向对象继承。
  • 数据库模板 - 从数据库读取数据通常需要反复打开游标、读取行和关闭游标,还要处理异常。使用这个模板类,你只需提供 SQL 查询和处理行的函数,Spring Python 会帮你完成其他的工作。
  • 数据库事务 - 将多个数据库调用包装在事务中可能会让代码变得难以阅读。这个模块提供了多种定义事务的方法,而不会让事情变得复杂。
  • 安全性 - 插件式的安全拦截器可以限制对你方法的访问,同时利用身份验证和领域授权。
  • 远程调用 - 将本地应用程序转换为分布式应用程序非常简单。如果你已经使用 IoC 容器构建了客户端和服务器部分,那么从本地到分布式只需更改配置。
  • 示例 - 为了展示 Spring Python 的各种功能,我们创建了一些示例应用程序:
    • 宠物诊所 - Spring 框架的示例网页应用程序已经用 Python 网络容器(包括:CherryPy)从头重建。去看看这个框架的使用示例吧。(注意:未来会将其他 Python 网络框架添加到这个列表中)。
    • Spring 维基 - 维基是存储和管理内容的强大工具,所以我们创建了一个简单的示例!
    • Spring 机器人 - 使用 Spring Python 构建一个小机器人来管理你开源项目的 IRC 频道。

撰写回答