Import Replacement
Gabriel Genellina
gagsl-py2 at yahoo.com.ar
Sat Jan 31 20:53:37 EST 2009
En Sat, 31 Jan 2009 18:22:54 -0200, Gary Herron
<gherron at islandtraining.com> escribió:
> James Pruitt wrote:
>> Imagine there are two files horse.py and buffalo.py. horse.py is
>> imported by another file rider.py. Is it possible to make it so that
>> under certain circumstances possibly based on an environment variable
>> or something similar that when rider.py imports horse.py, it actually
>> imports buffalo.py sort of like a behind the scenes replacement so
>> that rider.py needs little, preferably absolutely no modification?
>
> If horse and buffalo have the same interface then try something like
> this:
>
> if ...:
> import horse as ridable
> else:
> import buffalo as ridable
> # Now use ridable as any module...
>
> If each defines a class of its own name, but the classes have identical
> interfaces, then try
>
> if ...:
> from horse import Horse as Ridable
> else:
> from buffalo import Buffalo as Ridable
> # Then instantiate
> animal = Ridable(...)
Another alternative, that does not involve changing rider.py, would be to
rename horse.py -> _horse.py, buffalo.py -> _buffalo.py and write a *new*
horse.py:
if ...:
from _horse import *
else:
from _buffalo import *
Then, rider.py (and all other modules) still says "import horse", but it
will get one or another depending on the condition.
--
Gabriel Genellina
More information about the Python-list
mailing list