Steven Kah Hien Wong wrote: > Maybe I have misread, but I have interpreted that as meaning the two > children will share the same instance of the base class. So if one child > changes its parent, the other child will pick up that change, too. This interpretation seems correct to me. > But I did some quick tests, and it turns out this isn't so. It *is* so if you actually change the common parent, rather than one of the siblings (see modified example below). In your original example, the new 'x' was stored inside ChildOne's class dictionary, and so ChildTwo was not affected. To see the effect of the shared parent, you need to actually change the value of 'x' that is stored in CommonBase (as happens in the example below). ===================== class CommonBase: x = 0 class ChildOne(CommonBase): def foo(self): CommonBase.x = 1 ##### Change here class ChildTwo(CommonBase): pass class ChildOneAndTwo(ChildOne, ChildTwo): def run(self): ChildOne.foo(self) ##### Change Here print "one =", ChildOne.x print "two =", ChildTwo.x ChildOneAndTwo().run() ===================== Output is now: $ python multi.py one = 1 two = 1 ===================== In relation to Martin's post, the text is really talking about a problem with 'instance' variables in the presence of multiple inheritance: ===================== class Base(object): def __init__(self): super(Base, self).__init__() self.x = 0 print "Base initialised" def run(self): print "I am", self.x class One(Base): def __init__(self): super(One, self).__init__() self.x = 1 print "One initialised" class Two(Base): def __init__(self): super(Two, self).__init__() self.x = 2 print "Two initialised" class OneTwo(One, Two): def __init__(self): super(OneTwo, self).__init__() OneTwo().run() ===================== Output is: Base initialised Two initialised One initialised I am 1 ===================== -- Nick Coghlan | Eugene, Oregon Email: ncoghlan at email.com | USA
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4