wowthat' lot of inheritance arrowsi don' think it would be possible to add another level of inheritance without crossing arrows multiple inheritance is messy businesseven at the design stage the trickiest aspects of these classes is going to be ensuring superclass methods get called in the inheritance hierarchy let' start with the property implementationclass propertydef __init__(selfsquare_feet=''beds=''baths=''**kwargs)super(__init__(**kwargsself square_feet square_feet self num_bedrooms beds self num_baths baths def display(self)print("property details"print("================"print("square footage{}format(self square_feet)print("bedrooms{}format(self num_bedrooms)print("bathrooms{}format(self num_baths)print(def prompt_init()return dict(square_feet=input("enter the square feet")beds=input("enter number of bedrooms")baths=input("enter number of baths")prompt_init staticmethod(prompt_initthis class is pretty straightforward we've already added the extra **kwargs parameter to __init__ because we know it' going to be used in multiple inheritance situation we've also included call to super(__init__ in case we are not the last call in the multiple inheritance chain in this casewe're consuming the keyword arguments because we know they won' be needed at other levels of the inheritance hierarchy we see something new in the prompt_init method this method is made into static method immediately after it is initially created static methods are associated only with class (something like class variables)rather than specific object instance hencethey have no self argument because of thisthe super keyword won' work (there is no parent objectonly parent class)so we simply call the static method on the parent class directly this method uses the python dict constructor to create dictionary of values that can be passed into __init__ the value for each key is prompted with call to input