Source: https://www.physik.uzh.ch/~python/python_2019-06/lecture_oop/slides/oop_slides.pdf