https://towardsdatascience.com/5-best-practices-for-professional-object-oriented-programming-in-python-20613e08baee