Multiple inheritance with a common base class

Markus Bertheau twanger at bluetwanger.de
Tue Aug 10 08:19:05 EDT 2004


В Втр, 10.08.2004, в 13:37, Markus Bertheau пишет:

Also I observe that the instance will in fact _not_ have a single copy
of the data attributes used by the common base class. The following
example demonstrates this:

class CommonBase:
    def __init__(self):
        self.no = 0
    def setNo(self, no):
        self.no = no
 
class LeafA(CommonBase):
    def __init__(self):
        CommonBase.__init__(self)
        print("CommonBase.no: %i" % self.no)
        CommonBase.setNo(self, 3)
 
class LeafB(CommonBase):
    def __init__(self):
        CommonBase.__init__(self)
        print("CommonBase.no: %i" % self.no)
        CommonBase.setNo(self, 4)
 
class Multi(LeafA, LeafB):
    def __init__(self):
        LeafA.__init__(self)
        LeafB.__init__(self)
 
m = Multi()

It outputs:

CommonBase.no: 0
CommonBase.no: 0

If there was only one copy of the common base class, I'd have expected
an output similar to

CommonBase.no: 0
CommonBase.no: 3

This renders multiple inheritance pretty useless for me.

Can someone clear this all up and tell me how multiple inheritance is
supposed to work in python?

Thanks

-- 
Markus Bertheau <twanger at bluetwanger.de>




More information about the Python-list mailing list