简体   繁体   中英

Modifying a variable in a module imported using from … import *

Consider the following code:

#main.py
From toolsmodule import *
database = "foo"

#toolsmodule
database = "mydatabase"

As it seems, this creates one variable in each module with different content. How can I modify the variable inside toolsmodule from main? The following does not work:

toolsmodule.database = "foo"

Sounds like yet another of the multitude of good reasons not to use from toolsmodule import * .

If you just do import toolsmodule , then you can do toolsmodule.database = 'foo' , and everything is wonderful.

Pythons variable names are just labels on variables. When you import * all those labels are local and when you then set the database, you just replace the local variable, not the one in toolsmodule. Hence, do this:

toolsmodule.py:

database = "original"

def printdatabase():
   print "Database is", database

And then run:

import toolsmodule
toolsmodule.database = "newdatabase"
toolsmodule.printdatabase()

The output is

Database is newdatabase

Note that if you then from ANOTHER module ALSO did an import * the change is not reflected.

In short: NEVER use from x import * . I don't know why all newbies persist in doing this despite all documentation I know of says that it's a bad idea.

Why don't you do it like that:

import toolsmodule
toolsmodule.database = "foo"
from toolsmodule import *  #bad idea, but let's say you have to..
print database #outputs foo

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