"intermodule-global" variables

Humpty Dumpty oliver.schoenborn at utoronto.ca
Sun Jun 6 10:06:55 EDT 2004


"Eddy Ilg" <eddy at netido.de> wrote in message
news:mailman.612.1086463928.6949.python-list at python.org...
> Hi,
>
>
> I am having a problem with an application I am writing:
>
> I have 2 scripts called 'conf' and 'build'. Both define
> a variable named 'root' and import a module named 'helper'.
>
> In the helper module I want to access the root variable, that is
> _either_ in conf _or_ build. How can I do this?
> I just want the root variable to be global for all modules.
> (I don't want to put root in helper, since that would make no sense at
> all)

There's probably something wrong with the design. If helper shouldn't know
about conf or build, then why should it know about a variable that conf or
build use? Rather, conf build and helper should all refer to a variable in a
fourth module.

> I also tried this:
>
> ---- helper.py
> a=5
>
> def printa():
> global a
> print a
> ----
>
> >> from helper import *
> >> a
> 5
> >> a=6
> >> a
> 6
> >> printa()
> 5
>
>
> Why does this not work? Why are there suddenly two variables a? One
> for helper.py (stays 5) and a global one (became 6)? This is a bit

Because you have rebinded a. This can be a confusing aspect of Python at
first, that you access objects through a reference rather than directly. So
when you did a=6, you rebinded the module-level a to a new value, but this
doesn't affect the other reference, in helper.py, that was also called 'a'.
Same thing would happen for two classes:


class A:
  def __init__(self):
     self.a =1

class B:
  def __init(self, a):
    self.b = a

aa = A()
bb = B(aa.a)

Now both bb.b and aa.a  refer to the same value. Now if you do aa.a = 2,
that won't affect bb.b, rather bb.b and aa.a now refer to diferent
variables.

Oliver





More information about the Python-list mailing list