Hasty Briefsbeta

Bilingual

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.