Re: multiple inheritance super()
Available news archives: comp.lang.tcl - comp.lang.python - comp.security.firewalls - sci.crypt - comp.lang.php - comp.lang.javascript
Google
 
Web news.hping.org


comp.lang.python archive

Re: multiple inheritance super()

From: rafi <rafi@free.fr>
Date: Tue Jul 26 2005 - 23:27:25 CEST

Peter Hansen wrote:
> km wrote:
>
>> Hi all,
>>
>> In the following code why am i not able to access class A's object
>> attribute - 'a' ? I wishto extent class D with all the attributes of
>> its base classes. how do i do that ?
[snip]
> Each class should do a similar super() call, with the appropriate name
> substitutions.
[snip]
> -Peter

A related question is about the order of the __init__ calls. Considering
the following sample:

#--8<---
class A (object):
     def __init__ (self):
         super (A, self) .__init__ ()
         print 'i am an A'
     def foo (self):
         print 'A.foo'

class B (object):
     def __init__ (self):
         super (B, self) .__init__ ()
         print 'i am a B'
     def foo (self):
         print 'B.foo'

class C (A, B):
     def __init__ (self):
         super (C, self) .__init__ ()
         print 'i am a C'

c = C ()
c.foo ()
#--8<---

aerts $ python2.4 inheritance.py
i am a B
i am an A
i am a C
A.foo

I do understand the lookup for foo: foo is provided by both classes A
and B and I do not state which one I want to use, so it takes the first
one in the list of inherited classes (order of the declaration). However
I cannot find an explanation (I may have googled the wrong keywords) for
the order of the __init__ calls from C. I was expecting (following the
same order as the method lookup):

i am an A
i am a B
i am a C
A.foo

Thanks

-- 
rafi
	"Imagination is more important than knowledge."
	                            (Albert Einstein)
Received on Thu Sep 29 17:11:01 2005