A deeper dive into the mechanics behind classes, objects, inheritance, polymorphism and encapsulation in Python