【发布时间】:2009-09-22 10:17:31
【问题描述】:
在我正在工作的一个大型应用程序中,几个人以不同的方式导入相同的模块,例如 进口 x 或者 从 y 导入 x 这样做的副作用是 x 被导入两次,如果有人依赖全局属性,可能会引入非常微妙的错误
例如假设我有一个包含三个文件 mymodule.py、main.py 和 init.py
的包 mypakcagemymodule.py 内容
l = []
class A(object): pass
main.py 内容
def add(x):
from mypackage import mymodule
mymodule.l.append(x)
print "updated list",mymodule.l
def get():
import mymodule
return mymodule.l
add(1)
print "lets check",get()
add(1)
print "lets check again",get()
打印出来
updated list [1]
lets check []
updated list [1, 1]
lets check again []
因为现在两个不同的模块中有两个列表,同样A类是不同的 对我来说,这看起来很严肃,因为课程本身会受到不同的对待 例如下面的代码打印 False
def create():
from mypackage import mymodule
return mymodule.A()
def check(a):
import mymodule
return isinstance(a, mymodule.A)
print check(create())
问题:
有什么办法可以避免这种情况吗?除了强制该模块应该以一种方式导入外。这不能通过python导入机制来处理吗,我在django代码和其他地方也看到了一些与此相关的错误。
【问题讨论】:
标签: python python-import