make variable global to multiple files in python

10,871

Let me start by saying that I think globals like this (using the global keyword) are evil. But one way to restructure it is to put your globals into a class in a SEPARATE module to avoid circular imports.

a.py

from c import MyGlobals

def func2():
    print MyGlobals.x
    MyGlobals.x = 2

b.py

import a
from c import MyGlobals

def func1():
    MyGlobals.x = 1   


if __name__ == "__main__":
    print MyGlobals.x
    func1()
    print MyGlobals.x
    a.func2()
    print MyGlobals.x

c.py

class MyGlobals(object):
    x = 0

OUTPUT

$ python b.py 
0
1
1
2
Share:
10,871
onemach
Author by

onemach

Currently studying in Computer Science and Technology, FDU

Updated on June 05, 2022

Comments

  • onemach
    onemach almost 2 years

    I want to make a variable global to more than 2 files so that operating in any file reflects in the file containing the variable.

    what I am doing is:

    b.py

    import a
    
    x = 0
    def func1():
        global x
        x = 1   
    if __name__ == "__main__":
        print x
        func1()
        print x
        a.func2()
        print x
    

    a.py

    import b
    
    def func2():
        print b.x
        b.x = 2
    

    I have searched for threads here and find from a import * is making copies and import a is otherwise. I expect the code above to print 0 1 1 2(sure it should be in new lines) when execute python b.py but it's showing 0 1 0 1

    How does one implement that?

  • chepner
    chepner over 12 years
    The module c itself could provide the globals, rather than wrapping them in a class.
  • onemach
    onemach over 12 years
    why wrap with a class? without the class the problem is still there.
  • jdi
    jdi over 12 years
    I only wrap it in a class because I feel its more appropriate in case you did want to pass it around or store it on another class as a configuration object, and not actually store a module object.