replace mothod for only one object but not for a class

George Sakkis george.sakkis at gmail.com
Tue Oct 14 14:20:19 EDT 2008


On Oct 14, 1:50 pm, hofer <bla... at dungeon.de> wrote:
> Hi,
>
> I have multiple objects all belonging to the same class
>  (which I didn't implement and whose code I don't want to modify)
>
> Now I'd like to change one method for one object only (after it has
> been created) without adding any overhead
> to the call of the other object's methods.
>
> Is this possible?
>
> Example
> ##### This is NOT what I'd like to do
> ##### as it overwrites the method for all objects of this class
> o1 = aclass()
> o2 = aclass()
> # call original method
> o1.method()
> o2.method()
> # overwrite the method for the entire class
> aclass.method = mymethod
> o1.method() # now new method
> o2.method() # now new method
>
> ####### What doesn't work, but what I'd like to do
> o1 = aclass()
> o2 = aclass()
> # call original method
> o1.method()
> o2.method()
> # overwrite the method for the entire class
> o1.method = mymethod
> o1.method() # now new method
> o2.method() # still old method
>
> thanks for any pointers.

Please post the actual code that doesn't work. The following works as
expected:

    >>> class A(object):
    ...     def foo(self): return 'Original'
    ...
    >>> a = A()
    >>> b = A()
    >>> a.foo()
    'Original'
    >>> b.foo()
    'Original'
    >>> b.foo = lambda: 'Modified'
    >>> a.foo()
    'Original'
    >>> b.foo()
    'Modified'


HTH,
George



More information about the Python-list mailing list