https://medium.com/@ebojacky/a-short-review-of-advanced-object-oriented-programming-in-python-7efd978379b8