asdict recursively converts a dataclass to dict.
1from dataclasses import dataclass, asdict, field2from typing import List34@dataclass5class Address:6 city: str7 street: str89@dataclass10class User:11 name: str12 age: int13 address: Address14 tags: List[str] = field(default_factory=list)1516user = User("Alice", 25, Address("Moscow", "Lenina 1"), ["admin"])1718# Convert to dict19dict_data = asdict(user)20print(dict_data)21#{22# "name": "Alice",23# "age": 25,24# "address": {"city": "Moscow", "street": "Lenina 1"},25# "tags": ["admin"]26#}2728# Reverse conversion29user2 = User(**dict_data)3031# JSON serialization32import json33json_str = json.dumps(asdict(user), ensure_ascii=False)3435# Filtering36slim = {k: v for k, v in asdict(user).items() if k != "address"}3738# With exclude39from dataclasses import asdict4041compact = asdict(user, dict_factory=lambda x: {k: v for k, v in x if k != "tags"})
Benefits: