https://levelup.gitconnected.com/understanding-python-magical-methods-unlocking-the-power-of-dunder-methods-7c65dfbd84c5