This list is for the development _of_ Python, not development _with_ Python. Try asking on Python List. (forwarding...) On 11/04/2014 08:52 AM, Roberto MartÃnez wrote: > > I am trying to replace dinamically the __call__ method of an object using setattr. > Example: > > $ cat testcall.py > class A: > def __init__(self): > setattr(self, '__call__', self.newcall) > > def __call__(self): > print("OLD") > > def newcall(self): > print("NEW") > > a=A() > a() > > I expect to get "NEW" instead of "OLD", but in Python 3.4 I get "OLD". > > $ python2.7 testcall.py > NEW > $ python3.4 testcall.py > OLD > > 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) -- ~Ethan~
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4