Python 依赖注入(DI)实战指南
在大型项目中,灵活性容易导致依赖关系混乱、代码难以测试和维护。依赖注入(Dependency Injection,简称 DI)通过将对象的创建与使用分离,使代码更松耦合、更易扩展。结合类型提示(typing + mypy)和现代框架,Python 能优雅承载所有 DI 模式。
基础部分:Python 语言精要
依赖注入的实现离不开 Python 核心语法与面向对象机制。
- 核心语法与数据类型:列表、字典、集合、元组是构建依赖容器的基础;条件语句、循环和异常处理确保注入逻辑健壮。
config = {"db_url": "sqlite:///test.db", "timeout": 30}
items = [1, 2, 3]
- 函数与面向对象编程:函数定义、参数传递、匿名函数(lambda)和装饰器是 DI 的基础工具。类通过构造方法接收依赖,实现封装与多态。
import time
def timer(func):
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
end = time.time()
print(f"{func.__name__} 花费时间:{end - start:.4f}秒")
return result
return wrapper
@timer
def compute_sum(n):
return sum(range(n))
print(compute_sum(1000000))
高级技术与实战进阶
Python 的元编程、资源管理和异步特性,让 DI 实现更加高效。
- 元编程与动态生成:使用
type()动态创建带注入依赖的类,或 metaclass 自动注册服务。 - 上下文管理器与生成器:
with语句完美实现'注入生命周期管理',生成器(yield)则用于懒加载依赖。
from contextlib contextmanager
():
session = create_session()
:
session
:
session.close()


