Python Classes Generator#

This code generator produces the Python domain model, i.e. the set of Python classes that represent the entities and relationships of a Structural model.

Let’s generate the code for the Python domain model of our Structural model example structural model example. You should create a PythonGenerator object, provide the Structural model, and use the generate method as follows:

from besser.generators.python_classes import PythonGenerator

generator: Python_Generator = PythonGenerator(model=library_model)
generator.generate()

The classes.py file with the Django domain model (i.e., the set of classes) will be generated in the <<current_directory>>/output folder and it will look as follows.

  1
  2from datetime import datetime, date, time
  3
  4
  5class Book:
  6    def __init__(self, pages: int, release: datetime, title: str, writtenBy: set["Author"], locatedIn: "Library"):
  7        self.pages = pages
  8        self.release = release
  9        self.title = title
 10        self.writtenBy = writtenBy 
 11        self.locatedIn = locatedIn 
 12        
 13    @property
 14    def pages(self) -> int:
 15        return self.__pages
 16    
 17    @pages.setter
 18    def pages(self, pages: int):
 19        self.__pages = pages
 20    
 21    @property
 22    def release(self) -> datetime:
 23        return self.__release
 24    
 25    @release.setter
 26    def release(self, release: datetime):
 27        self.__release = release
 28    
 29    @property
 30    def title(self) -> str:
 31        return self.__title
 32    
 33    @title.setter
 34    def title(self, title: str):
 35        self.__title = title
 36    
 37    @property
 38    def writtenBy(self):
 39        return self.__writtenBy
 40    
 41    @writtenBy.setter
 42    def writtenBy(self, writtenBy):
 43        self.__writtenBy = writtenBy
 44    
 45    @property
 46    def locatedIn(self):
 47        return self.__locatedIn
 48    
 49    @locatedIn.setter
 50    def locatedIn(self, locatedIn):
 51        self.__locatedIn = locatedIn
 52    
 53class Author:
 54    def __init__(self, name: str, email: str, publishes: set["Book"]):
 55        self.name = name
 56        self.email = email
 57        self.publishes = publishes 
 58        
 59    @property
 60    def name(self) -> str:
 61        return self.__name
 62    
 63    @name.setter
 64    def name(self, name: str):
 65        self.__name = name
 66    
 67    @property
 68    def email(self) -> str:
 69        return self.__email
 70    
 71    @email.setter
 72    def email(self, email: str):
 73        self.__email = email
 74    
 75    @property
 76    def publishes(self):
 77        return self.__publishes
 78    
 79    @publishes.setter
 80    def publishes(self, publishes):
 81        self.__publishes = publishes
 82    
 83class Library:
 84    def __init__(self, address: str, name: str, has: set["Book"]):
 85        self.address = address
 86        self.name = name
 87        self.has = has 
 88        
 89    @property
 90    def address(self) -> str:
 91        return self.__address
 92    
 93    @address.setter
 94    def address(self, address: str):
 95        self.__address = address
 96    
 97    @property
 98    def name(self) -> str:
 99        return self.__name
100    
101    @name.setter
102    def name(self, name: str):
103        self.__name = name
104    
105    @property
106    def has(self):
107        return self.__has
108    
109    @has.setter
110    def has(self, has):
111        self.__has = has
112