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