Hasty Briefsbeta

双语

Stop Writing `__init__` Methods

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