On Tue, Jul 10, 2012 at 3:11 PM, Chris Hare <ch...@labr.net> wrote: > > I know they are bad. That is why I would prefer not to use it, but I am > not sure how else to handle this problem. > > In this app, the user must log in. Once authenticated, they have a userid > stored in the SQLite database. Before splitting my app into multiple > files, I used a global variable. I know its bad, but it worked. Now that > things are split apart, the classes which used it previously now don't see > it anymore, even using the global keyword. I think this is the expected > behavior. See here > > file: a.py > > import b > global_var = "global" > > def func1(): > global global_var > print "global var in func1 = %s" % global_var > > class intclass: > def func2(self): > global global_var > print "global var in intclass = %s" % global_var > > print "global_var = %s" % global_var > func1() > f = intclass() > f.func2() > g = b.extclass() > g.func3() > > file: b.py > > class extclass: > def func3(self): > global global_var > print "global var in extclass = %s" % global_var > > When I run it, I get what I think the expected behavior, that the external > class ext class won't be able to see the global_var > > Big-Mac:t chare$ python a.py > global_var = global > global var in func1 = global > global var in intclass = global > Traceback (most recent call last): > File "a.py", line 18, in <module> > g.func3() > File "/Users/chare/Development/python/animaltrax/pkg/t/b.py", line 5, in > func3 > print "global var in extclass = %s" % global_var > NameError: global name 'global_var' is not defined > > So - my question is this: how do I solve the problem of multiple classes > needing to get access to a value which needs to be preserved across the > lifetime of the running application? > > One thought was a RAM based SQLite database, but that seems like a lot of > work. I dunno, maybe that is the option. > > suggestions, ideas, criticisms are all welcome. Python code aside, I just > don't know how to approach this problem in Python. > > Thanks, as always for the feedback and guidance. > > _______________________________________________ > Tutor maillist - Tutor@python.org > To unsubscribe or change subscription options: > http://mail.python.org/mailman/listinfo/tutor >
You should avoid using the global statement. In your case, I would think you could just add an argument to the method: class MyObj(object): def __init__(self, arg): self.arg = arg def my_func(self, new_arg): self.arg = new_arg to call it: arg = 1 m = MyObj(arg) print m.arg new_arg = 2 m.my_func(new_arg) print m.arg
_______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor