https://onlinebme.com/magic-methods-in-python/