Inheritance and forward references (prototypes)
Lorenzo Di Gregorio
lorenzo.digregorio at gmail.com
Sat Jun 20 16:26:56 EDT 2009
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
More information about the Python-list
mailing list