The purpose is, I pass a list to a class in a module but I want to use that list out of the scope of that class and that too not in any other class or a function but in the main program... The problem is that when I import that, the statements in the module which are not in the class are executed first and then the variable gets intiallised... I will explain with the example...
-global test - -class a: - def __init__(self,test): - global test - print test - -print 'Outside: '+test
I want to print that variable test which I am giving to the class as an argument, in the scope of main... I know it is not a good way of programming but my situation is like this... But is this possible or not? If I pass test as 'Garry' can I (by any way) print 'Outside: Garry' with that print statement... (in the main scope)
Probably a better approach for this would be something like:
class A(object): def __init__(self, test): self.test = test def printtest(self): print 'Outside: %s' % self.test
where your code in your main module looks something like:
import amodule a = amodule.A('Garry') a.printtest()
The __init__ method is used for initializing *instances* of a class, so using the __init__ method to initialize a module-level variable doesn't really make much sense. If you really want to play around with module-level variables, you probably want to modify them with module-level functions, e.g.:
test = 'default' def a(val): global test test = val def printtest(): print 'Outside: %s' % test
where your code in your main module looks something like:
import amodule amodule.a('Garry') amodule.printtest()
Note that I've moved all your code that would normally be executed at module import time into the 'printtest' function. This way you can execute this code after import.
If you really need to have the code executed at the same time as the module is imported, another option would be to exec your code in an empty module instead of importing it:
py> a_module_str = """print 'Outside: %s' % test""" py> a_module = new.module('a') py> a_module.test = 'Garry' py> exec a_module_str in a_module.__dict__ Outside: Garry
Here I create an empty module, set its 'test' attribute to 'Garry', and then execute the rest of your code (e.g. the print statement). This is certainly my least favorite approach, but it seems to do the closest thing to what you're asking for.
Steve -- http://mail.python.org/mailman/listinfo/python-list