On Sun, 3 Jul 2016 09:06 am, Ian Kelly wrote: > you can't define a method > on an instance (though you can certainly store a function there and > call it).
Yes -- the difference is that Python doesn't apply the descriptor protocol to attributes attached to the instance. So the function remains a function and is not converted to a method, which means it doesn't automatically get the special "self" argument: class Test(object): pass instance = Test() def method(self): print("method called from self", self) instance.method = method If you try to call the "method", you get an error: py> instance.method() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: method() missing 1 required positional argument: 'self' But if you prepare the method ahead of time, it works: from types import MethodType instance.method = MethodType(method, instance) Now calling it works fine: py> instance.method() method called from self <__main__.Test object at 0xb79fcf14> -- Steven “Cheer up,” they said, “things could be worse.” So I cheered up, and sure enough, things got worse. -- https://mail.python.org/mailman/listinfo/python-list