https://medium.com/@alains/a-beginners-guide-to-polymorphism-in-python-mastering-object-oriented-programming-ecc62c140e57