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

前端 未结 3 1337
野趣味
野趣味 2021-01-11 19:15

Consider the following code:

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

#toolsmodule
database = \"mydatabase\"

As it seems, thi

相关标签:
3条回答
  • 2021-01-11 19:46

    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.

    0 讨论(0)
  • 2021-01-11 19:54

    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.

    0 讨论(0)
  • 2021-01-11 20:13

    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
    
    0 讨论(0)
提交回复
热议问题