Source: https://svakulenk0.github.io/pdfs/courses/python_WU_WS17/3-Paradigms.pdf