onemach
onemach

Reputation: 4325

make variable global to multiple files in python

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?

Upvotes: 2

Views: 11273

Answers (1)

jdi
jdi

Reputation: 92617

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

Upvotes: 7

Related Questions