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
Author by
onemach
Currently studying in Computer Science and Technology, FDU
Updated on June 05, 2022Comments
-
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 andimport a
is otherwise. I expect the code above to print0 1 1 2
(sure it should be in new lines) when executepython b.py
but it's showing0 1 0 1
How does one implement that?
-
chepner over 12 yearsThe module
c
itself could provide the globals, rather than wrapping them in a class. -
onemach over 12 yearswhy wrap with a class? without the class the problem is still there.
-
jdi over 12 yearsI 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.