◐ Shell
clean mode source ↗

gh-145056: Add support for frozendict in dataclass asdict and astuple by eendebakpt · Pull Request #145125 · python/cpython

Adds support for frozendict in dataclassses.astype and dataclasses.asdict. The main effect is that astuple and asdict recurse into a frozendict (just like they recurse into a dict). For example

from typing import Any
from dataclasses import dataclass, astuple, asdict

@dataclass
class A:
    item : Any

asub = A(item=10)
a = A(item=frozendict({'sub': asub}))
print(astuple(a))

Output on main: (frozendict({'sub': A(item=10)}),)
Output on PR: (frozendict({'sub': (10,)}),)

Notes:

  • Tracking issue for PEP 814 is PEP 814: Add built-in frozendict type #141510
  • For exact dicts there is a fastpath (for performance reasons). In this PR we have not added a fastpath for the frozendict. If this turns out to be a common case, we can add the fastpath later.

📚 Documentation preview 📚: https://cpython-previews--145125.org.readthedocs.build/