Rolf Wester wrote:
Hi,

I would like to define methods using exec like this:

class A:
    def __init__(self):
        cmd = "def sqr(self, x):\n    return x**2\nself.sqr = sqr\n"
        exec cmd
a = A()
print a.sqr(a, 2)

This works, but I have to call sqr with a.sqr(a, 2), a.sqr(2) does not work
(TypeError: sqr() takes exactly 2 arguments (1 given)).

Is there a possibility to define methods using exec and getting normal behavior?

I would be very appreciative for any help.

With kind regards
Rolf Wester


I'll try to ignore you are using the exec statement which is an error :o)

a.sqr(2) would have worked only if sqr was a *bound* method.

print a.sqr
<function sqr at 0x94ecd14>


to oppose to
print a.__init__
<bound method A.__init__ of <__main__.A instance at 0x948734c>>


You cannot dynamically bind a method, however you can do the following.

cmd = "def sqr(x):\n    return x**2\nself.sqr = sqr\n"



http://docs.python.org/reference/datamodel.html : 
<http://docs.python.org/reference/datamodel.html>
"It is also important to note that user-defined functions which are attributes of a 
class instance are not converted bound methods; this only happens when the function is an 
attribute of the class. "

JM

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

Reply via email to