https://mysteryweevil.medium.com/unlocking-the-power-of-abstraction-and-static-type-checking-in-python-eb100c95b5ea