Global var access in imported modules?
slfdsasdssaf at spam.not
Thu Aug 28 03:51:52 CEST 2008
Dennis Lee Bieber wrote:
> On Wed, 27 Aug 2008 16:21:03 -0400, RgeeK <Ross at no.thanks.spammers>
> declaimed the following in comp.lang.python:
>> I have a main module doStuff.py and another module utility.py. At the
>> start of doStuff.py I call
>> import utility.py
> I hope not... import utility no .py
>> Then I also proceed to initiallize some global variables
> Python does not have global variables. Names belong within a module
> (or within functions defined within the module).
>> sName = ""
>> Then I create a class, some methods etc. In one of the methods I assign
>> a value to my variable sName. Then I call a function from within
>> my utility.py file:
>> Within my utility.py file, I define the makeOne function. But I want to
>> use that same global variable "sName" In utility.py I have tried to
>> indicate that I'm using the global "sName" through the statement:
>> global sName
> The global statement is only used within functions (def blocks) to
> indicate that "writes" to the specified name are to modify the MODULE
> level version of the name, otherwise a write modifies a function local
> version of the name (you don't need global for read-only access of
> names, the search for names first looks inside the function, then out to
> the module)
>> But when I go to use the variable it still gives me an error:
>> NameError: global name 'sName' is not defined
>> I thought perhaps I need to indicate 'globality' in my main module, so
>> before I initiallized sName in doStuff.py I added:
>> global sName
>> But it doesn't help me. I had this issue before and resolved it by
>> declaring the variable global in the sub-module utility.py, but then I
>> needed to reference it in my main module with a prefix:
>> utility.sName = ""
>> It's more verbose,and defining globals in a submodule seems backward.
>> But also, what if I need to access "sName" in another imported module,
>> say "otherstuff.py"? I would do my "import otherstuff" call in my main
>> module, but would I have to put an "import utility" into the
>> otherstuff.py file?
> If you really need "globals" the common solution is to create a
> module such as "myglobals", define all the shared names within that
> module, and import that module where ever you need access to one of the
> names. And yes, you will need to qualify all those names with the module
> name (though you can do things like:
> import myglobals as mg
> and then use
> instead of
Thanks for the reply. Good to see that approach has broad support :)
I'll do that. I like the idea of a nice short alias for the import to
keep the qualifications brief.
More information about the Python-list