写入模块

可以说我有这3个(小)python文件 -

a.py

myvar = 'a'

b.py

import a
import c

myvar = 'b'
c.pr()

c.py

from a import myvar

def pr():
    print myvar

现在,如果我执行b.py我会得到输出

a

但我真的想要输出为

b

所以请告诉我如何重构/修改程序,以便为模块范围的myvar分配不同的值。


b.py中 ,您正在设置b.py的myvar。 你想访问myvar的值。 所以b.py可能看起来像:

import a
import c

a.myvar = 'b' # belongs to a
myvar = 'something different' # belongs to b
c.pr()

你需要更新c.py,以便它使用a.py的myvar,而不是它自己的本地副本。 所以c.py

import a

def pr():
    print a.myvar

为什么?

在您的原始c.py中 ,当您from a import myvar调用时,这相当于:

import a
myvar = a.myvar

这会在导入时在c.py中创建一个myvar的本地版本。 如果这是令人困惑的,我找到了这篇关于python变量如何工作非常丰富的文章。


我会做第四个模块d.py

此模块由'a','b'和'c'导入。

正如在文档中:

在单个程序中跨模块共享信息的规范方式是创建一个特殊模块(通常称为config或cfg)。 只需在应用程序的所有模块中导入配置模块; 该模块将成为全球名称。 由于每个模块只有一个实例,因此对模块对象所做的任何更改都会反映到处

请小心; 一旦你创建了这个配置模块,因为它是必要的,那么很容易就会被带走,并开始向其中添加其他变量,只是因为它在那里。 大多数时候有更好的方法...

链接地址: http://www.djcxy.com/p/54801.html

上一篇: Writing to module

下一篇: how to access attributes initialized in class constructor of different py file?