[Python-3000] Adaptation vs. Generic Functions
Phillip J. Eby
pje at telecommunity.com
Thu Apr 13 19:13:01 CEST 2006
At 10:34 AM 4/13/2006 -0500, Ian Bicking <ianb at colorstudy.com> wrote:
>And even if that wasn't a problem, it means mpz would be eagerly loaded
>along with NumPy even if it wasn't needed. Or if you had to manually
>import this operator.add-glue, then if you forget it is likely to be
>difficult to debug, because there's no *bad* code, just code that is
>missing.
PEAK addresses this problem with a decorator:
@whenImported('mpz')
def setup_for_ mpz(mpz):
@operator.add.register(...)
def ...
The 'whenImported' function checks to see if mpz is already present in
sys.modules. If so, it calls the function immediately, passing in the
named module. If not, it puts an object in sys.modules whose
__getattribute__ tries to actually import the module and then calls back
any registered functions, so that anybody else importing mpz will get the
real module.
I've actually been using this for a few years now, as the eager-vs.-lazy
problem is independent of setuptools and package activation. It comes up
any time you want to offer support for something without creating a
dependency on it.
More information about the Python-3000
mailing list