https://mysteryweevil.medium.com/mastering-operator-overloading-a-practical-guide-to-polymorphism-in-python-52ea97c1519a