Python,正确的条件导入方式

15 投票
4 回答
17459 浏览
提问于 2025-04-16 22:05

现在我有一个叫做 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 了。

撰写回答