On Sat, Mar 8, 2008 at 8:38 PM, Steven Bethard <[EMAIL PROTECTED]> wrote: > > I don't see an error thrown with either the bound or unbound methods... >
Sorry, I should have clarified. The error occurs when wrapping the function as a descriptor, not when wrapping it with another function. Here's an example in Python 2.5: class add_initial_argument(object): def __init__(self, descriptor, callable=None): self.descriptor = descriptor self.callable = callable def __get__(self, obj, type=None): return add_initial_argument(self.descriptor, self.descriptor.__get__(obj, type)) def __call__(self, *args, **kwargs): return self.callable.__call__('newarg', *args, **kwargs) class C(object): @add_initial_argument def foo(newarg, self): print 'arg1: ', newarg print 'arg2: ', self >>> C().foo() arg1: <__main__.C object at 0x00A900D0> arg2: newarg >>> C.foo(C()) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 11, in __call__ TypeError: unbound method foo() must be called with C instance as first argument (got str instance instead) Also notice that the bound method still got self as the first argument. See the script example in my recent reply to Greg Ewing for why I'm using descriptor wrapping: http://mail.python.org/pipermail/python-3000/2008-March/012428.html _______________________________________________ Python-3000 mailing list Python-3000@python.org http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com