thoughnew-style classes visit first otherwisec could be essentially pointless in diamond context for any names in too--it could not customize and would be used only for names unique to explicit conflict resolution of coursethe problem with assumptions is that they assume thingsif this search order deviation seems too subtle to rememberor if you want more control over the search processyou can always force the selection of an attribute from anywhere in the tree by assigning or otherwise naming the one you want at the place where the classes are mixed together the followingfor examplechooses new-style order in classic class by resolving the choice explicitlyclass aattr class ( )pass class ( )attr class (bc)attr attr ( attr classic <=choose cto the right works like new-style (all xherea tree of classic classes is emulating the search order of new-style classes for specific attributethe assignment to the attribute in picks the version in cthereby subverting the normal inheritance search path ( attr will be lowest in the treenewstyle classes can similarly emulate classic classes by choosing the higher version of the target attribute at the place where the classes are mixed togetherclass (object)attr class ( )pass class ( )attr class (bc)attr attr ( attr new-style <=choose attrabove works like classic (default xif you are willing to always resolve conflicts like thisyou may be able to largely ignore the search order difference and not rely on assumptions about what you meant when you coded your classes naturallyattributes picked this way can also be method functions--methods are normalassignable attributes that happen to reference callable function objectsclass adef meth( )print(' meth'class ( )def meth( )print(' meth'class ( )new-style class changes