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