Skip to content Skip to sidebar Skip to footer

Python Multiple Inheritance Qustion

This is an interview example question I copied and modified from question 10 of: https://www.codementor.io/sheena/essential-python-interview-questions-du107ozr6 class A(object):

Solution 1:

I understand calling b.stop() shows "stop A stop!" because b does not override stop() so will inherit stop() from A.

But I do not understand why calling d.stop() only show stop of A,C,D, not ACBD, isn't MRO: D->B->C->A?

B inherits stop from A, but what that means is that when you try to access B.stop or some_B_instance.stop, the attribute search will find the method through A.__dict__ after looking in B.__dict__. It doesn't put the method in the B class directly.

When super follows the MRO of a D instance, class B comes after D, but super is only interested in looking at B itself at this point, not B's ancestors. It looks in B.__dict__ for a stop entry, without considering inherited methods; inherited methods will be handled later in the search, when super reaches the classes those methods are inherited from.

Since inheriting methods doesn't actually put them in B.__dict__, super doesn't find stop in B.

Solution 2:

B does not have its own stop (you'll notice the string "stop B stop" never appears in the code), so it will never be executed. In other worse, since there is no line of code which could possibly print "stop B stop", it will not be printed.

Post a Comment for "Python Multiple Inheritance Qustion"