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
[email protected]
http://mail.python.org/mailman/listinfo/python-3000
Unsubscribe:
http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com