https://medium.com/@quanticascience/introduction-to-object-oriented-programming-in-python-a2abd5032def