https://mysteryweevil.medium.com/mastering-abstraction-and-inheritance-in-python-a-practical-guide-f34563551030