私が取り組んでいる大きなアプリケーションでは、複数の人が同じモジュールを異なる方法でインポートします。たとえば、インポートxまたはyからインポートxの副作用は、xが2回インポートされ、誰かがグローバル属性に依存している場合、非常に微妙なバグを引き起こす可能性があります
たとえば、mymodule.py、 main.py 、 init.pyの3つのファイルを持つパッケージmypakcageがあるとします。
mymodule.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 []
2つの異なるモジュールに2つのリストがあるため、同様にクラス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コードやその他の場所でも、これに関連するいくつかのバグが見られます。