Method Resolution Order (MRO) in new-style classes?

后端 未结 4 701
离开以前
离开以前 2020-11-22 10:00

In the book Python in a Nutshell (2nd Edition) there is an example which uses
old style classes to demonstrate how methods are resolved in classic resolution or

4条回答
  •  时光取名叫无心
    2020-11-22 10:12

    The result you get is correct. Try changing base class of Base3 to Base1 and compare with the same hierarchy for classic classes:

    class Base1(object):
        def amethod(self): print "Base1"
    
    class Base2(Base1):
        pass
    
    class Base3(Base1):
        def amethod(self): print "Base3"
    
    class Derived(Base2,Base3):
        pass
    
    instance = Derived()
    instance.amethod()
    
    
    class Base1:
        def amethod(self): print "Base1"
    
    class Base2(Base1):
        pass
    
    class Base3(Base1):
        def amethod(self): print "Base3"
    
    class Derived(Base2,Base3):
        pass
    
    instance = Derived()
    instance.amethod()
    

    Now it outputs:

    Base3
    Base1
    

    Read this explanation for more information.

提交回复
热议问题