Stop Writing `__init__` Methods
a year ago
- #Python
- #Object-Oriented-Design
- #Dataclasses
- Dataclasses were introduced in Python 3.7 to simplify class definitions, especially for data structures.
- Before dataclasses, defining a class with an `__init__` method was common but led to issues like mutable defaults and complexity.
- Using `__init__` for object construction links object creation with side effects, making testing and flexibility difficult.
- The article suggests using `dataclass`, `classmethod` factories, and precise types (like `NewType`) as best practices.
- `classmethod` factories provide discoverable and flexible ways to create objects, including async construction.
- `NewType` helps enforce constraints on primitive types, ensuring object validity.
- The new best practice involves making classes dataclasses, using default `__init__`, and adding `classmethod` factories for construction.
- This approach ensures valid objects, future-proofs against new requirements, and simplifies testing.