Прямо сейчас у меня есть класс под названием 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)
, есть ли способ сделать это проще? Без фабричного слоя? Теперь это может превратить каждый вызов статического метода в моем классе в 2 строки. Я всегда могу держать ссылку в классе, чтобы уменьшить влияние, но я действительно надеюсь, что у Python есть более простое решение.