Stop Writing `__init__` Methods
a year ago
- #Python
- #Object-Oriented-Design
- #Dataclasses
- Python 3.7引入数据类(dataclasses)以简化类定义,特别适用于数据结构场景
- 在数据类出现前,使用`__init__`方法定义类很常见,但会引发可变默认值等问题
- 通过`__init__`构造对象会将对象创建与副作用耦合,增加测试难度并降低灵活性
- 本文推荐使用`@dataclass`装饰器、类方法工厂和精确类型(如NewType)作为最佳实践
- 类方法工厂提供可发现且灵活的实例化方式,支持包括异步构造在内的多种场景
- NewType能对基础类型施加约束,确保对象有效性
- 新实践要求将类声明为数据类,保持默认`__init__`,并通过类方法工厂处理实例化
- 这种方案能保证对象有效性、适应未来需求变化,并显著简化测试流程