https://nitesh-yadav.medium.com/demystifying-object-oriented-programming-oop-concepts-in-python-32b6b93e3c74