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.
- Issue: Many pure python tools that have a special cases for dict should accept frozendict as well. #145056
📚 Documentation preview 📚: https://cpython-previews--145125.org.readthedocs.build/