On 8/11/21 12:02 AM, Thomas Grainger wrote:
I think as long as there's a test case for something like

```
@dataclass
class Node:
    global_node: ClassVar[Node | None]
    left: InitVar[Node | None]
    right: InitVar[None | None]
```

the bug https://bugs.python.org/issue33453 and the current implementation https://github.com/python/cpython/blob/bfc2d5a5c4550ab3a2fadeb9459b4bd948ff61a2/Lib/dataclasses.py#L658-L714 shows this is a tricky problem


The most straightforward workaround for this is to skip the decorator syntax.  With PEP 649 active, this code should work:

class Node:
    global_node: ClassVar[Node | None]
    left: InitVar[Node | None]
    right: InitVar[None | None]
Node = dataclass(Node)


/arry