in even simpler termswatch what happens in the followingas an instance of the metaclass typeclass acquires ' attributebut this attribute is not made available for inheritance by ' own instances--the acquisition of names by metaclass instances is distinct from the normal inheritance used for class instancesclass (type)attr class (metaclass= )pass is meta instance and acquires meta attr ( inherits from class but not metab attr attr attributeerror'bobject has no attribute 'attr'attrin __dict__'attrin __dict__ (falsetrueby contrastif morphs from metaclass to superclassthen names inherited from an superclass become available to later instances of band are located by searching namespace dictionaries in classes in the tree--that isby checking the __dict__ of objects in the method resolution order (mro)much like the mapattrs example we coded back in class aattr class ( )pass inherits from class and supers ( attr attr 'attrin __dict__'attrin __dict__ (falsetruethis is why metaclasses often do their work by manipulating new class' namespace dictionaryif they wish to influence the behavior of later instance objects--instances will see names in classbut not its metaclass watch what happensthoughif the same name is available in both attribute sources--the inheritance name is used instead of instance acquisitionclass (type)attr class aattr class (ametaclass= )pass supers have precedence over metas ( attri attr ( 'attrin __dict__'attrin __dict__'attrin __dict__ (falsetruetruethis is true regardless of the relative height of the inheritance and instance sources-python checks the __dict__ of each class on the mro (inheritance)before falling back on metaclass acquisition (instance)class (type)attr class aattr inheritance and instance