Nikolaus Rath schrieb:
Hi,
I want to monkeypatch an object so that it becomes callable, although
originally it is not meant to be. (Yes, I think I do have a good reason
to do so).
But simply adding a __call__ attribute to the object apparently isn't
enough, and I do not want to touch the class object (since it would
modify all the instances):
class foo(object):
... pass
...
t = foo()
def test():
... print 'bar'
...
t()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'foo' object is not callable
t.__call__ = test
t()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'foo' object is not callable
t.__call__()
bar
Is there an additional trick to get it to work?
AFAIK special methods are always only evaluated on the class. But this
works:
class Foo(object):
pass
f = Foo()
def make_callable(f):
class Callable(f.__class__):
def __call__(self):
print "foobar"
f.__class__ = Callable
make_callable(f)
f()
Diez
--
http://mail.python.org/mailman/listinfo/python-list