Ahora mismo tengo una clase llamada A.
Tengo un código como este ..
from my.package.location.A import A ... foo = A.doSomething(bar)
Esto es genial.
Pero ahora tengo una nueva versión de A llamada A, pero en un paquete diferente, pero solo quiero usar esta otra A en un determinado escenario. Así que puedo hacer algo como esto:
if(OldVersion): from my.package.location.A import A else: from new.package.location.A import A ... foo = A.doSomething(bar)
Esto funciona bien. Pero es feo. ¿Cómo puedo hacer esto mejor? Tengo muchas ganas de hacer algo como esto
from my.abstraction.layer.AFactory import AFactory ... myA = AFactory.giveMeA() # this looks at "OldVersion" and gives me the correct A foo = myA.doSomething(bar)
¿Hay alguna manera de hacerlo más fácil? ¿Sin la capa de fábrica? Esto ahora puede convertir todas las llamadas de método estático en mi clase en 2 líneas. Siempre puedo mantener una referencia en una clase para reducir el impacto, pero realmente espero que Python tenga una solución más simple.
Pon tus líneas en a_finder.py:
if OldVersion: from my.package.location.A import A else: from new.package.location.A import A
Luego en su código de producto:
from a_finder import A
y obtendrás la adecuada A.
Podrías hacer algo como esto:
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
Luego simplemente import AlwaysRightA as A
y listo.
¿Podría simplemente hacer un paquete en una tercera ubicación que verifique OldVersion y obtenga su propia A desde el lugar correcto, y luego siempre importe ese paquete?
from my.package.location.A import A as old from new.package.location.A import A as new
Algo así?
old.someFunc() new.someFunc()
No entendí el punto de la pregunta.