[Python-Dev] Dinamically set __call__ method
robertomartinezp at gmail.com
Tue Nov 4 20:01:38 CET 2014
Yikes, I didn't realize the difference in inheritance.
The thing with this is tricky. I need the change in the instance, not in
the class, because I have multiple instances and all of them must have
different implementations of __call__.
The workaround of calling a different method inside __call__ is not valid
for my case because I want to change the *signature* of the function also
-for introspection reasons.
Thank you all.
(Ethan, sorry for posting to python-dev, I thought that it was an
implementation detail of CPython 3.X)
On Tue, Nov 4, 2014 at 7:23 PM, Ethan Furman <ethan at stoneleaf.us> wrote:
> This list is for the development _of_ Python, not development _with_
> Try asking on Python List.
> On 11/04/2014 08:52 AM, Roberto Martínez wrote:
>> I am trying to replace dinamically the __call__ method of an object using
>> $ cat testcall.py
>> class A:
>> def __init__(self):
>> setattr(self, '__call__', self.newcall)
>> def __call__(self):
>> def newcall(self):
>> I expect to get "NEW" instead of "OLD", but in Python 3.4 I get "OLD".
>> $ python2.7 testcall.py
>> $ python3.4 testcall.py
>> I have a few questions:
>> - Is this an expected behavior?
>> - Is possible to replace __call__ dinamically in Python 3? How?
> In 2.7 that would be a classic class, about which I know little.
> In 3.x you have a new class, one which inherits from 'object'. When you
> replace __call__ you need to replace it the class, not on the instance:
> setattr(__self__.__class__, self.newcall)
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Python-list