mutlifile inheritance problem

Peter Cacioppi peter.cacioppi at gmail.com
Wed Sep 18 20:03:43 EDT 2013


One more comment - my trick has some utility with multiple inheritance, but you really need to understand super() to and method resolution ordering in that case (as, I suppose, you ought to whenever you cross the Rubicon beyond single inheritance). So it's a nice trick but YMMV

On Wednesday, September 18, 2013 4:54:00 PM UTC-7, Peter Cacioppi wrote:
> This is a very old topic, but here is a trick for single inheritance. (The problem you allude to isn't restricted to multiple inheritance).
> 
> 
> 
> Any class with a single parent simply defines this function.
> 
> 
> 
> 
> 
>     def mySuper(self) : 
> 
>         return super(self.__class__, self)
> 
>       
> 
> And then any parent function be referenced like
> 
>     self.mySuper().foo()
> 
> 
> 
> This includes __init__.
> 
> 
> 
> You can read more here.
> 
> 
> 
> http://atlee.ca/blog/posts/blog20081121python-reload-danger-here-be-dragons.html
> 
> 
> 
> 
> 
> On Thursday, March 21, 2002 2:03:23 PM UTC-7, Marc wrote:
> 
> > I have classes defined in different files and would like to inherit
> 
> > from a class in file A.py for a class in file B.py but am running into
> 
> > problems.  I'm using Python 1.5.2 on Windows NT
> 
> > 
> 
> > Here's a specific example:
> 
> > 
> 
> > ************************
> 
> > file cbase01.py:
> 
> > 
> 
> > class CBase:
> 
> > 
> 
> >     def __init__(self):
> 
> >         self.cclass = None
> 
> >         print "cbase"
> 
> > 
> 
> > class CImStream(CBase):
> 
> > 
> 
> >     def __init(self):
> 
> >         CBase.__init__(self)
> 
> >         print "CImStream"
> 
> > 
> 
> > *************************
> 
> > in file wrappers_A01.py: 
> 
> > 
> 
> > import cbase01
> 
> > reload(cbase01)
> 
> > 
> 
> > class ImStream_SavedBitmaps(cbase01.CImStream):
> 
> > 
> 
> >     def __init__(self):
> 
> >         cbase.CImStream.__init__(self)
> 
> >         print "SavedBitmaps"
> 
> > 
> 
> > **************************
> 
> > in file sequencer01.py
> 
> > 
> 
> > import cbase01    # the offending lines, program works 
> 
> > reload(cbase01)   # if I comment these out.
> 
> > 
> 
> > class Sequencer:
> 
> > 
> 
> >     def Append(self, item):
> 
> >         pass
> 
> > 
> 
> > *****************************
> 
> > in test02.py
> 
> > 
> 
> > import wrappers_A01
> 
> > reload(wrappers_A01)
> 
> > 
> 
> > import sequencer01
> 
> > reload(sequencer01)
> 
> > 
> 
> > x0 = wrappers_A01.ImStream_SavedBitmaps()
> 
> > ***************************************************************
> 
> > 
> 
> > If I run test02 I get the traceback
> 
> > 
> 
> > Traceback (innermost last):
> 
> >   File "<string>", line 1, in ?
> 
> >   File "D:\PythonCode\pna\eyeTracking\tests\test02.py", line 15, in ?
> 
> >     x0 = wrappers_A01.ImStream_SavedBitmaps()
> 
> >   File "D:\PythonCode\pna\eyeTracking\tests\wrappers_A01.py", line 21,
> 
> > in __init__
> 
> >     cbase.CImStream.__init__(self)
> 
> > TypeError: unbound method must be called with class instance 1st
> 
> > argument
> 
> > 
> 
> > 
> 
> > Any ideas what I am doing wrong?
> 
> > 
> 
> > Thanks,
> 
> > Marc




More information about the Python-list mailing list