https://towardsdatascience.com/8-tips-for-object-oriented-programming-in-python-3e98b767ae79