https://medium.com/@datta.indrajeet/good-practices-for-using-object-oriented-programming-oop-in-python-4a72811cbf83