If the AST structure is defined without using the @dataclass
decorator, that is, by defining (manually) the constructor method of the classes and the getter and setter methods of each attribute, then it will be necessary to define also all the attributes of the class as static attributes. In the following example, the books
attribute, although defined in the constructor method, must also be defined as a static attribute.
class Library(Node):
books: list["Book"]
def __init__(self, books:list["Book"]):
self.books: list("Book") = books
@property
def books(self) -> list["Book"]:
return self.__books
@books.setter
def books(self, books: list["Book"]):
self.__books = books
This is necessary for the ASTTransformer
to correctly recognize the attributes.