简体   繁体   中英

Import a single global variable from a different module in python

I have an interesting application and I would like to access a global variable from a different module.

I currently have module x

from pkg.mod import *

in order to get the namespace foo .

where my pkg.mod looks like the following

import x
foo = 0
# do some stuff
foo = myClass()

That all works just great, however, I would like NOT to do that, mostly just because its bad.

If I try the following

from pkg import mod

I get a circular dependency issue. ImportError: cannot import name mod which makes sense to me.

What I want to do is

from pkg.mod import foo

but that also gives me an import name error: ImportError: cannot import name foo Which I am not exactly sure why, except I dont think you can import variables specifically.

Is there anyway to import foo following correct practices?

---edit---

I have tried to remove the shared variable and put it in a third module in such a way

pkg.y

foo = 0

pkg.mod

from pkg.y import foo
foo = myClass()
x.dostuff()

x

from pkg.y import foo
def dostuff():
   print(foo)

and now x thinks foo is still 0. (I can guarantee that mod is calling x, and thus happening first.)

When I need a true global variable I find it cleaner to create a module called trueglobals.py; it can remain empty but for proper documentation...

# -*- coding: utf-8 -*-
# Object references that are used extensively across many modules are 
# stored here.

# someObject1      - instantiated in main.py
# someObject2      - instantiated in someothermodule.py

In the module instantiating the object...

import trueglobals
trueglobals.someObject1 = myClass(somevar)

In any module requiring the object...

import trueglobals
localVar = trueglobals.someObject1

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM