[Tutor] advice on global variables
Chris Hare
chare at labr.net
Tue Jul 10 21:11:26 CEST 2012
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.
More information about the Tutor
mailing list