https://blog.devgenius.io/initialization-and-construction-special-methods-python-oop-complete-course-part-13-78b62305101