1
frmEnv = __import__(conf)
frmEnv.SCHEMA='abc'

toEnv = __import__(conf)
toEnv.SCHEMA='def'

print(frmEnv.SCHEMA, toEnv.SCHEMA)

输出:

('def', 'def')

我希望两个值都不同。
有没有办法使变量的值不可更改(常量或静态)

我不希望 frmEnv.SCHEMA 值一旦分配给它就改变。

4

2 回答 2

1

一个python模块只导入一次;第二次导入只返回已经初始化的模块——它的代码不会第二次执行。这意味着您的frmEnvtoEnv是对同一对象的两个引用。

如果您解释您要完成的(具体任务),有人可以告诉您如何去做。这不是办法。

于 2013-06-08T22:59:18.223 回答
1

正如其他人所解释的那样,您尝试做的事情是完全错误的。但是,如果我尝试阅读您的想法(尽管我很少擅长心灵感应),也许您想要的是拥有第一个模块的副本?

然后您可能想要使用该copy模块,并更改您的对象的副本:

frmEnv = __import__(conf)
frmEnv.SCHEMA='abc'

toEnv = copy.deepcopy(frmEnv) # or copy.copy() depending on what are the members of frmEnv...
toEnv.SCHEMA='def'

print(frmEnv.SCHEMA, toEnv.SCHEMA)

Output:

('abc', 'def')

您可能还希望使用模块使用其文件名加载imp模块,并在当前环境中为其指定两个不同的名称,以便它们实际加载两次。它应该具有与副本相同的效果,但更多地依赖于文件的文件系统放置,因此不那么优雅(这就是我不给出示例的原因)。读者更难理解你为什么这样做。

高温高压

于 2013-06-08T23:09:38.230 回答