继承其他file.py全局变量

时间:2012-08-30 11:42:01

标签: python inheritance globals

如何从其他.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相同,例如首先我导入,设置新值,然后尝试从另一个文件中打印出新设置的值。

2 个答案:

答案 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等来实现。