https://medium.com/@giorgio.martinez1926/diving-into-advanced-python-concepts-a-practical-example-8d5fd67c2dea