https://medium.com/@aminasaeed223/understanding-object-oriented-programming-oop-concepts-in-python-for-beginners-506a78265dd0