Python,以正确的方式执行条件导入

2024-05-19 02:54:58 发布

您现在位置:Python中文网/ 问答频道 /正文

现在我有一门课叫a

我有这样的代码。。

from my.package.location.A import A

...


foo = A.doSomething(bar)

这太好了。

但是现在我有了一个新版本的a,叫做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有一个更简单的解决方案。


Tags: 代码fromimport版本packageiffoomy
3条回答

你能不能在第三个地方做一个包,检查旧版本,从正确的地方得到它自己的a,然后总是导入那个包?

把你的台词放进查找器里:

if OldVersion:
    from my.package.location.A import A
else:
    from new.package.location.A import A

然后在产品代码中:

from a_finder import A

你会得到合适的A

你可以这样做:

始终亮.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就可以了。

相关问题 更多 >

    热门问题