How to Create Dataclass with Default Values in Python
In Python, you create a dataclass with default values by using the
@dataclass decorator and assigning default values directly to fields or using field(default=...) or field(default_factory=...) for mutable defaults. This allows you to create instances without specifying all values explicitly.Syntax
To create a dataclass with default values, use the @dataclass decorator from the dataclasses module. Assign default values directly to fields or use field() for more control.
@dataclass: marks the class as a dataclass.- Field with default:
field_name: type = default_value. - Field with default factory:
field(default_factory=callable)for mutable defaults like lists.
python
from dataclasses import dataclass, field @dataclass class Example: name: str = "Unknown" age: int = 0 tags: list = field(default_factory=list)
Example
This example shows a dataclass Person with default values for name, age, and a list hobbies using default_factory. You can create instances with or without specifying these values.
python
from dataclasses import dataclass, field @dataclass class Person: name: str = "John Doe" age: int = 30 hobbies: list = field(default_factory=list) # Creating instances person1 = Person() person2 = Person(name="Alice", age=25, hobbies=["reading", "cycling"]) print(person1) print(person2)
Output
Person(name='John Doe', age=30, hobbies=[])
Person(name='Alice', age=25, hobbies=['reading', 'cycling'])
Common Pitfalls
Common mistakes include using mutable default values directly, which can cause shared state between instances. Always use field(default_factory=...) for mutable types like lists or dictionaries.
Also, fields without defaults must come before fields with defaults in the class definition.
python
from dataclasses import dataclass, field # Wrong: mutable default shared across instances @dataclass class Wrong: items: list = [] # Avoid this! # Right: use default_factory for mutable defaults @dataclass class Right: items: list = field(default_factory=list)
Quick Reference
| Feature | Usage | Purpose |
|---|---|---|
| @dataclass | Above class definition | Marks class as dataclass |
| field_name: type = value | Direct assignment | Set default value for field |
| field(default_factory=callable) | Inside field() | Set default for mutable types |
| Order of fields | Non-defaults first | Avoid TypeError in dataclass |
Key Takeaways
Use @dataclass decorator to create dataclasses easily.
Assign default values directly or use field(default_factory=...) for mutable defaults.
Never use mutable objects like lists or dicts as direct default values.
Place fields without defaults before fields with defaults in the class.
Default values let you create instances without specifying every field.