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