https://pythonians.medium.com/understand-the-different-types-of-methods-and-how-to-use-them-in-this-python-class-e7de7227642a