Reputation: 5036
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"
Upvotes: 11
Views: 9671
Reputation: 172377
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.
Upvotes: 6
Reputation: 134701
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
Upvotes: 2
Reputation: 600026
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.
Upvotes: 19