2011-07-22 19 views
7

Teraz mam klasy o nazwie A.Python robi PRZYWOZOWI warunkowego właściwą drogę

Mam niektóre kodu podobnego ..

from my.package.location.A import A 

... 


foo = A.doSomething(bar) 

To jest wielki.

Ale teraz mam nową wersję A o nazwie A, ale w innym pakiecie, ale chcę tylko użyć tego drugiego A w pewnym scenariuszu. Więc mogę zrobić coś takiego:

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

... 

foo = A.doSomething(bar) 

To działa dobrze. Ale to jest brzydkie. Jak mogę to zrobić lepiej? Naprawdę chcę zrobić coś takiego w ten sposób, że mogę zrobić to łatwiej,? Bez warstwy fabrycznej? To teraz może zmienić każde statyczne wywołanie metody w mojej klasie na 2 linie. Zawsze mogę zachować referencję w klasie, aby zmniejszyć wpływ, ale mam nadzieję, że pyton ma prostsze rozwiązanie.

Odpowiedz

13

Umieść swoje wiersze w a_finder.py:

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

Następnie w kodzie produktu:

from a_finder import A 

a dostaniesz właściwą A.

+0

Dokładnie tak działa "Python" :) –

1

Czy możesz po prostu zrobić paczkę w jakiejś trzeciej lokalizacji, która sprawdza OldVersion i pobiera jego własne A z właściwego miejsca, a następnie zawsze importuje ten pakiet?

-2
from my.package.location.A import A as old 
from new.package.location.A import A as new 

coś takiego?

old.someFunc() 
new.someFunc() 

Nie zrozumiałem sensu pytania.

+0

myślę, że można wycofać swoją odpowiedź jeśli nie rozumiesz ... – sage

+0

@sage Lol. 4 lata temu nie mogłem komentować z powodu braku powtórzeń. Dlatego publikuję ją jako odpowiedź, aby uzyskać więcej informacji. – Jaxedin

2

Można zrobić coś takiego:

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 

Następnie wystarczy import AlwaysRightA as A i jesteś ustawiony.