0
0
PythonHow-ToBeginner · 3 min read

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

FeatureUsagePurpose
@dataclassAbove class definitionMarks class as dataclass
field_name: type = valueDirect assignmentSet default value for field
field(default_factory=callable)Inside field()Set default for mutable types
Order of fieldsNon-defaults firstAvoid 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.