On Fri, 3 Mar 2006, david mugnai wrote: [snip] > > If I don't misunderstood the problem, you can define an "init" method for > your module_g > > (code not tested) > > module_g.py > ----------- > > _functions = {} > def init(mathmodule): > _function['sqrt'] = getattr(mathmodule, 'sqrt', None) > > def _get(name): > try: > return _functions[name] > except KeyError: > raise TypeError("you have to initialize module_g") > > def sqrt(x): > return _get('sqrt')(x) > > main.py > ------- > > import math > import module_g > > module_g.init(math) > print module_g.sqrt(2)
Thanks, this gets me close. Is there anything really bad about the following? It works exactly as I would like, but I don't want to get in trouble down the road: module_f -------- import math as my_math def set_math(custom_math): globals()['my_math'] = custom_math def f(x): return my_math.sqrt(x) >>> import module_f >>> module_f.f(2) 1.4142135623730951 >>> import cmath >>> module_f.set_math(cmath) >>> module_f.f(2j) (1+1j) Or, if one wants to use the "from __ import *" form: from math import * def set_math(custom_math): globals().update(custom_math.__dict__) def f(x): return sqrt(x) Michael -- http://mail.python.org/mailman/listinfo/python-list