the __dict__ of all metaclasses on the __mro__ found at ' __class__from left to right in both rule and give precedence to data descriptors located in step sources (see ahead in both rule and skip step and begin the search at step for built-in operations (see aheadthe first two steps are followed for normalexplicit attribute fetch only there are exceptions for both built-ins and descriptorsboth of which we'll clarify in moment in additiona __getattr__ or __getattribute__ may also be used for missing or all namesrespectivelyper most programmers need only be aware of the first of these rulesand perhaps the first step of the second--which taken together correspond to classic class inheritance there' an extra acquisition step added for metaclasses ( )but it' essentially the same as others-- fairly subtle equivalence to be surebut metaclass acquisition is not as novel as it may seem in factit' just one component of the larger model the descriptors special case at least that' the normal--and simplistic--case listed step in the prior section speciallybecause it doesn' apply to most codeand complicates the algorithm substantially it turns outthoughthat inheritance also has special case interaction with ' attribute descriptors in shortsome descriptors known as data descriptors --those that define __set__ methods to intercept assignments--are given precedencesuch that their names override other inheritance sources this exception serves some practical roles for exampleit is used to ensure that the special __class__ and __dict__ attributes cannot be redefined by the same names in an instance' own __dict__class cpass ( __class__i __dict__ ({}inheritance special case # class data descriptors have precedence __dict__['name''bobi __dict__['__class__''spami __dict__['__dict__'{dynamic data in the instance assign keysnot attributes name name comes from __dict__ as usual 'bobbut __class__ and __dict__ do noti __class__i __dict__ ({'__class__''spam''__dict__'{}'name''bob'}this data descriptor exception is tested before the preceding two inheritance rules as preliminary stepmay be more important to python implementers than python programmersand can be reasonably ignored by most application code in any event--that metaclasses