Dynamic class methods misunderstanding
Hans Nowak
hans at zephyrfalcon.org
Fri Jan 28 11:09:16 EST 2005
Bill Mill wrote:
> Hello all,
>
> I have a misunderstanding about dynamic class methods. I don't expect
> this behavior:
>
> In [2]: class test:
> ...: def __init__(self, method):
> ...: self.method = method
> ...: self.method()
> ...:
>
> In [3]: def m(self): print self
> ...:
[...]
>
> TypeError: m() takes exactly 1 argument (0 given)
> -----------------------------------------------------------------------------
>
> Why doesn't m get the implicit self parameter in the self.method()
> call? How would I make it a proper member of the class, so that a
> self.method() call would work with the above "m" function?
m is a function. When you assign it to self.method, it's still a
function. You don't create a new method that way; all you have is a new
attribute called 'method' containing the function.
To add m as a new method to the *class*, do this:
>>> class test:
... def __init__(self, method):
... self.__class__.method = method
... self.method()
...
>>> def m(self): print self
...
>>> test(m)
<__main__.test instance at 0x0192ED78>
<__main__.test instance at 0x0192ED78>
>>>
To add m as a new method to the *instance*, use new.instancemethod, as
Diez B. Roggisch already pointed out.
HTH,
--
Hans Nowak
http://zephyrfalcon.org/
More information about the Python-list
mailing list