Dataclasses

Anotation @dataclasses is just like @AllArgsConstructor in java

For example:

from dataclasses import dataclass, field
from typing import *

@dataclass
class Node:
    value: int = 0
    left: 'Node' = field(init=False, default=None)
    right: 'Node' = field(init=False, default=None)

if __name__ == "__main__":
    root = Node()
    root.left = Node(5)
    root.right = Node(10)
    
    print(root)

We will have this:

Node(value=0, left=Node(value=5, left=None, right=None), right=Node(value=10, left=None, right=None))

@dataclass will add for us repr which will print out the corresponding value of a node.

Also for left and right, since we don't want it to be in constructor, we need to use field() and marks init=False. '

However when marking init=False we also need to state that default=None.