Inheritance and forward references (prototypes)
Xavier Ho
contact at xavierho.com
Sat Jun 20 19:05:47 EDT 2009
Arg, forgot to post to the mailing list again. -_-
On a smaller issue, don't you need to do:
class DebugA(BaseA):
def __init__(self):
BaseA.__init__(self)
return
As in, explicitly call the __init__ function when you initalise DebugA,
since DebugA extends BaseA?
I'm just getting this "necessary" step because my books say so. If anyone
has a good explanation, please do tell.
Best regards,
Ching-Yun "Xavier" Ho, Technical Artist
Contact Information
Mobile: (+61) 04 3335 4748
Skype ID: SpaXe85
Email: contact at xavierho.com
Website: http://xavierho.com/
On Sun, Jun 21, 2009 at 6:26 AM, Lorenzo Di Gregorio <
lorenzo.digregorio at gmail.com> wrote:
> On Jun 20, 8:43 pm, Dave Angel <da... at ieee.org> wrote:
> > Lorenzo Di Gregorio wrote:
> > > Hi,
> >
> > > I'm wondering what would be the preferred way to solve the following
> > > forward reference problem:
> >
> > > ---------------------------------------
> > > class BaseA(object):
> > > def __init__(self):
> > > return
> >
> > > class DebugA(BaseA):
> > > def __init__(self):
> > > return
> >
> > > # here I would have a prototype of class A which is the same as class
> > > BaseA
> >
> > > class B(object):
> > > def __init__(self):
> > > self.obj = A()
> > > return
> >
> > > if __name__ == "__main__":
> > > # class A(BaseA): # Uncomment this for using BaseA objects
> > > # pass
> > > class A(DebugA): # Uncomment this for using DebugA objects
> > > pass
> > > ---------------------------------------
> >
> > > I can figure out some ways to fix this but none seems satisfying.
> > > Either they are too specific or too cumbersome.
> > > A runtime redefinition of class A does not seem to work either.
> > > What would be the most "pythonesque" solution other than sorting out
> > > the class order?
> >
> > > Best Regards,
> > > Lorenzo
> >
> > You haven't shown us any problem. class B works fine with a forward
> > reference to A. Now if you were trying to subclass A before defining
> > it, that'd be a problem. Or if you were trying to make an instance of B
> > before defining A.
> >
> > Better put some code together with enough meat to actually show a
> > symptom. And tell us what sys.version says. I'm testing with 2.6.2
> > (r262:71605, Apr 14 2009, 22:40:02) [MSC v.1500 32 bit (Intel)], running
> > on Win XP.- Hide quoted text -
> >
> > - Show quoted text -
>
> Thank you for your help: I'm working on a rather large source, but I
> think I have isolated the problem now.
> This listing generates an error:
>
> -----------------------------------------------
> class BaseA(object):
> def __init__(self):
> return
>
> class DebugA(BaseA):
> def __init__(self):
> return
>
> class B(object):
> def __init__(self,test=A()):
> self.obj = A()
> return
>
> if __name__ == "__main__":
> # class A(BaseA): # Uncomment this for using BaseA objects
> # pass
> class A(DebugA): # Uncomment this for using DebugA objects
> pass
> -----------------------------------------------
>
> The error happens because Python apparently evaluates the named
> arguments before running the script.
> I think I have read something about this some (long) time ago but I
> can't find it anymore.
>
> Suggestions?
>
> BTW, my Python version is 2.6.1 (with latest PyDev).
>
> Thx!
> Lorenzo
> --
> http://mail.python.org/mailman/listinfo/python-list
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20090621/d4e9fd54/attachment-0001.html>
More information about the Python-list
mailing list