Python,正确的条件导入方式
现在我有一个叫做 A 的类。
我有一些这样的代码……
from my.package.location.A import A
...
foo = A.doSomething(bar)
这很好。
但是现在我有一个新的版本,还是叫 A,但它在不同的包里。我只想在特定情况下使用这个新的 A。所以我可以这样做:
if(OldVersion):
from my.package.location.A import A
else:
from new.package.location.A import A
...
foo = A.doSomething(bar)
这样做没问题。但看起来很丑。有没有更好的方法?我其实想这样做:
from my.abstraction.layer.AFactory import AFactory
...
myA = AFactory.giveMeA() # this looks at "OldVersion" and gives me the correct A
foo = myA.doSomething(bar)
有没有更简单的方法可以做到这一点?不需要工厂层?这样的话,我每次调用类里的静态方法都要写两行代码。我可以在类里保持一个引用来减少影响,但我真的希望 Python 有更简单的解决方案。
4 个回答
1
你能不能在其他地方做一个包,这个包会检查旧版本,然后从正确的地方获取它自己的A,然后总是导入这个包呢?
2
你可以这样做:
AlwaysRightA.py
import sys
if(OldVersion):
from my.package.location.A import A
else:
from new.package.location.A import A
sys.modules[__name__] = A
然后只需要用 import AlwaysRightA as A
这行代码就可以了,搞定!
24
把你的代码放到 a_finder.py 这个文件里:
if OldVersion:
from my.package.location.A import A
else:
from new.package.location.A import A
然后在你的产品代码里:
from a_finder import A
这样你就能得到正确的 A 了。