Gurpreet said:
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