Python Tip: Using default_factory in Dataclasses

🚀 Python Tip: Using default_factory in Dataclasses While working on a data quality framework in Python, I encountered an interesting scenario with timestamps. I wanted every new instance of my dataclass to have a fresh, current timestamp. At first, I tried this: from dataclasses import dataclass, field from datetime import datetime, timezone @dataclass class QualityCheckResult:   timestamp: datetime = datetime.now(timezone.utc) # ❌ The problem? Every instance got the same timestamp — Python evaluated it once when the class was defined. Not what I wanted! The solution: default_factory @dataclass class QualityCheckResult:   timestamp: datetime = field(default_factory=lambda: datetime.now(timezone.utc)) # ✅ Why this works: default_factory expects a callable (like a lambda or function) Python stores the callable, but doesn’t run it immediately Every time you create a new object, Python calls the lambda, producing a fresh timestamp 💡 Think of it as keeping a “recipe” instead of the finished product. Each object gets its own freshly baked “timestamp” instead of reusing the same one. This small tweak solves a subtle bug and ensures my data quality logs always reflect the exact creation time. Python’s dataclasses + default_factory = cleaner, bug-free defaults! ⚡

To view or add a comment, sign in

Explore content categories