[Tutor] advice on global variables
Alexandre Zani
alexandre.zani at gmail.com
Tue Jul 10 22:18:51 CEST 2012
On Tue, Jul 10, 2012 at 12:11 PM, Chris Hare <chare at 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 at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
Can you tell us a little more about what this app does? As a general
rule, if you're using a global variable it's a strong sign that you're
doing something wrong. Can we see real code?
To answer your most basic question:
import a
a.global_var
But again, that's probably not the right way to solve your problem.
More information about the Tutor
mailing list