Coord as a frozen dataclass with lat: float and lon: float — assignment after construction must raise — and write try_move(c) that attempts c.lat = 0 and returns 'immutable' when the expected FrozenInstanceError/AttributeError fires. Frozen dataclasses are also hashable, so they work in sets.try_move(Coord(12.9, 77.6))
'immutable'
Frozen instances reject attribute assignment.
dataclasses.FrozenInstanceError subclasses AttributeError.
Catching AttributeError covers it.