mrstephengross schrieb: > I've got an interesting problem with my class hierarchy. I have an > outer class, in which two nested classes are defined: > > class Outer: > class Parent: > def __init__ (self): > print "parent!" > class Child(Parent): > def __init__ (self): > Outer.Parent.__init__(self) > foo = Child() > > Note that the second nested class (Outer.Child) inherits from the > first nested class (Outer.Parent). When I run the above code, python > reports a name error: > > Traceback (most recent call last): > File "./temp.py", line 3, in ? > class Outer: > File "./temp.py", line 13, in Outer > foo = Child() > File "./temp.py", line 11, in __init__ > Outer.Parent.__init__(self) > NameError: global name 'Outer' is not defined > > Apparently, python doesn't like having an instance of a derived nested > class present in the outer class. Interestingly enough, if I change > the foo variable to an instance of the parent class: > > foo = Parent() > > everything is hunky-dory. Is there some syntax rule I'm breaking here?
It's simple - you try to refer to Outer whilst Outer itself is being created. A much simpler version of your problem is this: class Foo: foo = Foo() You have to live with that. Just do Outer.foo = Outer.Parent() after your class-statement to achieve the same result. Diez -- http://mail.python.org/mailman/listinfo/python-list