dataclasses.astuple is recursive (according to the documentation):
Each dataclass is converted to a tuple of its field values. dataclasses, dicts, lists, and tuples are recursed into.
Indeed, consider example:
In [1]: from dataclasses import dataclass, astuple
...: from typing import List
...:
...: @dataclass
...: class Point:
...: x: float
...: y: float
...:
...: @dataclass
...: class Side:
...: left: Point
...: right: Point
...:
...: side = Side(Point(2, 3), Point(1, 2))
...: astuple(side)
...:
...:
Out[1]: ((2, 3), (1, 2))
Are there any simple built-in way to obtain two-tuple of points i.e. (Point(x=2, y=3), Point(x=1, y=2)) instead?