En Fri, 25 May 2007 06:12:14 -0300, Fabrizio Pollastri  
<[EMAIL PROTECTED]> escribió:

> I am trying to override a method of a class defined into an imported
> module, but keeping intact the namespace of the imported module.

The last part I don't get completely...

> For example, let suppose
>
>       import module_X
>
> and in module_X is defined something like
>
>       class A:
>
>            ...
>
>            def method_1():
>              ...
>
>         ...
>
> I wish to override method_1 with a new function and to call the
> overrided method inside my application with the same name of the
> original method like
>
>       ...
>       module_X.method_1()
>       ...

I think you meant to say:
   someAinstance = module_X.A(...)
   someAinstance.method_1(...)

If you import module_X in a SINGLE module, in THAT module you could use:

import module_X
class A(module_X.A):
   def method_1()...

and create all your instances using A(). (This is the traditional  
approach, you modify the original class by inheritance).
Notice that the important thing is where you *create* your instances:  
other modules that import module_X but do not create A instances are  
unaffected; they will use your modified class anyway.

If you import module_X in several places, and you create A instances in  
several places too, you may "monkey-patch" the A class. Somewhere at the  
*start* of your application, you can write:

def method_1(self, ...):
    ... new version of method_1

import module_X
module_X.A.method_1 = method_1

You are effectively replacing the method_1 with another one.

-- 
Gabriel Genellina

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to