Hi, I have three files in a simple testcase, and when I run $ main.py callee.options This comes back with a Traceback pointing out the following error: File "callee.options", line 5, in __init__ Foo.__init__(self, value) NameError: global name 'Foo' is not defined
The three files are: --------------- main.py --------------- #!/usr/bin/env python import sys class Stuff: def __init__(self, filename): self.greeting = 'Hi world' self.filename = filename def run(self): print self.greeting execfile(self.filename) work = Stuff(sys.argv[1]) work.run() --------------- somelib.py --------------- class Foo: def __init__(self, value): self.value = value def do_stuff(self): raise NotImplementedError() class OfficialBar(Foo): def __init__(self, value): Foo.__init__(self, value) def do_stuff(self): print self.value --------------- callee.options --------------- from somelib import Foo, OfficialBar class MyBar(Foo): def __init__(self, value): Foo.__init__(self, value) #super(MyBar, self).__init__(value) def do_stuff(self): print 2 * self.value + 1 baz = MyBar(7) #baz = OfficialBar(7) baz.do_stuff() --------------------------------------------- If I comment out the baz = MyBar(7) line, and uncomment the baz = OfficialBar(7) line, then there's no error. I'm sure this is somehow related to the fact that the execfile is within the Stuff class scope, and thus my import statements are working under some nested scope, but I don't know how to fix it (other modifying main.py to remove the Stuff class entirely, but in my real testcase I only have access to the callee.options file). I'm sure this is covered in some FAQ or post somewhere, but I seem to be coming up short in my search. If someone could someone point me to the relevant FAQ or post, I'd be more than happy to go read it. Thanks, Elijah -- http://mail.python.org/mailman/listinfo/python-list