in this examplewe directly call the __init__ function on each of the superclasses and explicitly pass the self argument this example technically workswe can access the different variables directly on the class but there are few problems firstit is possible for superclass to go uninitialized if we neglect to explicitly call the initializer that wouldn' break this examplebut it could cause hard-to-debug program crashes in common scenarios imagine trying to insert data into database that has not been connected tofor example secondand more sinisteris the possibility of superclass being called multiple times because of the organization of the class hierarchy look at this inheritance diagramobject +_init_(contact addressholder +_init_(+_init_ friend +_init_(the __init__ method from the friend class first calls __init__ on contactwhich implicitly initializes the object superclass (rememberall classes derive from objectfriend then calls __init__ on addressholderwhich implicitly initializes the object superclass again this means the parent class has been set up twice with the object classthat' relatively harmlessbut in some situationsit could spell disaster imagine trying to connect to database twice for every requestthe base class should only be called once onceyesbut whendo we call friendthen contactthen objectthen addressholderor friendthen contactthen addressholderthen objectthe order in which methods can be called can be adapted on the fly by modifying the __mro__ (method resolution orderattribute on the class this is beyond the scope of this book if you think you need to understand iti recommend expert python programmingtarek ziadepackt publishingor read the original documentation on the topic at