En Sat, 26 Jan 2008 12:10:03 -0200, J. Pablo Fernández <[EMAIL PROTECTED]> escribi�:
> Is it possible to replace one package with another at runtime, that is, I > have package a.blah which I want instead of b.blah, so I can "inject" > functionality in an existing package? It might be done, just assign the replacement functions/classes to the existing module. This has the same warnings as the reload() function: already created objects maintain their original behavior, already imported names from modules maintain their original value, already bound names to default arguments maintain their original value, etc. So it is best to do it as early as possible, but anyway some effects can't be avoided: === a.py === default_tax_pct = 21 print "in a, default_tax_pct=",default_tax_pct def foo(): print "original foo" def tax(amount, pct=default_tax_pct): print amount, pct, amount*pct/100 === path_a.py === import a def foo(): print "other foo" print "patching a.foo", a.foo = foo print a.foo print "patching a.default_tax_pct", a.default_tax_pct = 15 print a.default_tax_pct === main.py === import a from a import default_tax_pct import patch_a print "in main, a.default_tax_pct", a.default_tax_pct print "in main, default_tax_pct", default_tax_pct print "calling a.foo:" a.foo() print "calling a.tax(100.0):" a.tax(100.0) === output === in a, default_tax_pct= 21 patching a.foo <function foo at 0x00A3F0B0> patching a.default_tax_pct 15 in main, a.default_tax_pct 15 in main, default_tax_pct 21 calling a.foo: other foo calling a.tax(100.0): 100.0 21 21.0 -- Gabriel Genellina -- http://mail.python.org/mailman/listinfo/python-list