Python, faire conditionnelle importations de la bonne façon
Droit maintenant, j'ai une classe appelée A.
J'ai un code comme celui-ci..
from my.package.location.A import A
...
foo = A.doSomething(bar)
Ce qui est excellent.
Mais maintenant j'ai une nouvelle version d'Un appelé, mais dans un autre package, mais je veux seulement utiliser cette autre dans un certain scénario. Si je peux faire quelque chose comme ceci:
if(OldVersion):
from my.package.location.A import A
else:
from new.package.location.A import A
...
foo = A.doSomething(bar)
Cela fonctionne bien. Mais qu'il est laid. Comment puis-je faire de mieux? J'ai vraiment envie de faire quelque chose comme ceci
from my.abstraction.layer.AFactory import AFactory
...
myA = AFactory.giveMeA() # this looks at "OldVersion" and gives me the correct A
foo = myA.doSomething(bar)
est-il un moyen que je peux faire plus simple? Sans l'usine couche? Ce peut maintenant transformer chaque appel de la méthode statique sur ma classe en 2 lignes. Je peux toujours contenir une référence à une classe de réduire l'impact, mais je suis vraiment en espérant python a une solution plus simple.
OriginalL'auteur asdasdasd | 2011-07-22
Vous devez vous connecter pour publier un commentaire.
Mettre vos lignes en a_finder.py:
Puis dans votre code de produit:
et vous obtiendrez la bonne A.
Il est trop vieux la réponse, mais. Comment puis-je passer le paramètre
OldVersion
pour le fichier a_finder?OriginalL'auteur Ned Batchelder
Vous pourriez faire quelque chose comme ceci:
AlwaysRightA.py
Alors simplement
import AlwaysRightA as A
et vous êtes fixés.OriginalL'auteur Chris Eberle
Pourriez-vous faire un paquet dans la troisième emplacement qui vérifie OldVersion et arrive c'est le propre de la droite endroit, puis importer ce paquet?
OriginalL'auteur psr
quelque chose comme ça?
je n'ai pas d'obtenir le point de la question.
Lol. Il y a 4 ans, je pouvais pas commenter parce que de pas de rep. Donc je l'ai poster une réponse pour obtenir plus d'informations.
OriginalL'auteur Jaxedin