相关疑难解决方法(0)

如果从不同的路径导入,则重新导入模块

在我正在工作的大型应用程序中,有几个人以不同的方式导入相同的模块,例如导入x或从导入x导致x的副作用被导入两次,如果有人依赖于全局属性,可能会引入非常微妙的错误

例如,假设我有一个包mypakcage,包含三个文件mymodule.py,main.py和init .py

mymodule.py内容

l = []
class A(object): pass
Run Code Online (Sandbox Code Playgroud)

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()
Run Code Online (Sandbox Code Playgroud)

它打印

updated list [1]
lets check []
updated list [1, 1]
lets check again []
Run Code Online (Sandbox Code Playgroud)

因为现在在两个不同的模块中有两个列表,类似的A类是不同的对我来说它看起来很严重因为类本身将被区别对待,例如下面的代码打印False

def create():
    from mypackage import mymodule
    return mymodule.A()

def check(a):
    import mymodule
    return isinstance(a, mymodule.A)

print check(create())
Run Code Online (Sandbox Code Playgroud)

题:

有什么方法可以避免这种情况吗?除了强制执行该模块应该以单向onyl方式导入.这不能由python导入机制处理,我在django代码和其他地方也看到了与此相关的几个错误.

python python-import

8
推荐指数
2
解决办法
1219
查看次数

标签 统计

python ×1

python-import ×1