如何从其他.py文件继承全局变量?
例:
globals.py
test = 'testValue'
index.py
from globals import *
def setGlobals():
global test
test = 'new Value' # Setting new value to project global
setGlobals()
help.py
from globals import *
print test # Should print out 'new Value', but it prints 'testValue'
我希望有一个文件充满了由另一个文件设置的常量和全局变量,并且还被其他文件使用。在此示例中,我将新值设置为test
中的全局变量index.py
,并希望在help.py
中使用新值。我使用错误的方法进行python吗?谢谢。
编辑: 事件序列与exampled相同,例如首先我导入,设置新值,然后尝试从另一个文件中打印出新设置的值。
答案 0 :(得分:1)
在Python模块中是对象。进行导入时,您正在复制并可能将一个模块的属性重命名为当前模块。但是,这仅复制值(或更具体地,按值复制引用)。如果稍后更改导入的模块,则不会复制您的副本。一种可能的方法是尝试将第二个模块中的全局变量定义为属性,但我不确定它是否有效。
然而,无论如何,你要做的是糟糕的设计。您需要重新考虑为什么要在任何地方访问和修改全局值。尝试重构代码并替换依赖注入的任何内容。例如,将您的globals模块替换为可以传递给任何需要它的配置对象。
答案 1 :(得分:0)
根据:
在 "vim.normalModeKeyBindingsNonRecursive": [
{
"before": [
"k", // Bind the new functionality to the "k" key.
...??... // Somehow, effectively take an argument of
// any second character.
],
"after": [
"i", // Go to insert mode.
...??..., // insert the second character typed above.
"<Esc>" // Return to normal mode.
]
},
]
内部,您将删除:
index.py
然后您将进行更改:
global test
收件人:
test = 'new Value' # Setting new value to project global
在globals.test = 'new Value' # Setting new value to project global
中,您将更改:
help.py
收件人:
print test # Should print out 'new Value', but it prints 'testValue'
我今晚实际上正在从事类似的项目,因此稍后会回来并确认网站的正确性(尽管这是正确的)。
似乎已通过此链接确认:
顺便说一句,令我有些惊讶的是,堆栈溢出对此没有任何答案,除了经常出现的“您不能这样做”的答案。我没有像您在评论中那样的print globals.test # Should print out 'new Value', but it prints 'testValue'
经验。但是我使用了c++
和psuedo c
,让您为全局变量包含头文件似乎很容易,而且不应该回避。我一直在Linux c#
中用bash
等来实现。