https://thecodecadence.medium.com/grasp-principles-in-object-oriented-design-a-practical-guide-with-python-examples-ccb9b38ea60e