the previous example does what it is supposed to do but it' starting to look messyand it has become difficult to answer the questionwhat arguments do we need to pass into friend __init__this is the foremost question for anyone planning to use the classso docstring should be added to the method to explain what is happening furthereven this implementation is insufficient if we want to reuse variables in parent classes when we pass the **kwargs variable to superthe dictionary does not include any of the variables that were included as explicit keyword arguments for examplein friend __init__the call to super does not have phone in the kwargs dictionary if any of the other classes need the phone parameterwe need to ensure it is in the dictionary that is passed worseif we forget to do thisit will be tough to debug because the superclass will not complainbut will simply assign the default value (in this casean empty stringto the variable there are few ways to ensure that the variable is passed upwards assume the contact class doesfor some reasonneed to be initialized with phone parameterand the friend class will also need access to it we can do any of the followingdon' include phone as an explicit keyword argument insteadleave it in the kwargs dictionary friend can look it up using the syntax kwargs['phone'when it passes **kwargs to the super callphone will still be in the dictionary make phone an explicit keyword argument but update the kwargs dictionary before passing it to superusing the standard dictionary syntax kwargs['phone'phone make phone an explicit keyword argumentbut update the kwargs dictionary using the kwargs update method this is useful if you have several arguments to update you can create the dictionary passed into update using either the dict(phone=phoneconstructoror the dictionary syntax {'phone'phonemake phone an explicit keyword argumentbut pass it to the super call explicitly with the syntax super(__init__(phone=phone**kwargswe have covered many of the caveats involved with multiple inheritance in python when we need to account for all the possible situationswe have to plan for them and our code will get messy basic multiple inheritance can be handy butin many caseswe may want to choose more transparent way of combining two disparate classesusually using composition or one of the design patterns we'll be covering in python design patterns and python design patterns ii