On 8/14/06, Steven Bethard <[EMAIL PROTECTED]> wrote:
> On 8/14/06, Guido van Rossum <[EMAIL PROTECTED]> wrote:
> > I believe the PEP doesn't address the opposite use case: positional
> > arguments that should *not* be specified as keyword arguments. For
> > example, I might want to write
> >
> >   def foo(a, b): ...
> >
> > but I don't want callers to be able to call it as foo(b=1, a=2) or
> > even foo(a=2, b=1).
>
> Another use case is when you want to accept the arguments of another
> callable, but you have your own positional arguments::
>
>     >>> class Wrapper(object):
>     ...     def __init__(self, func):
>     ...         self.func = func
>     ...     def __call__(self, *args, **kwargs):
>     ...         print 'calling wrapped function'
>     ...         return self.func(*args, **kwargs)
>     ...
>     >>> @Wrapper
>     ... def func(self, other):
>     ...     return self, other
>     ...
>     >>> func(other=1, self=2)
>     Traceback (most recent call last):
>       File "<interactive input>", line 1, in ?
>     TypeError: __call__() got multiple values for keyword argument 'self'
>
> It would be really nice in the example above to mark ``self`` in
> ``__call__`` as a positional only argument.

But this is a rather unusual use case isn't it? It's due to the bound
methods machinery. Do you have other use cases? I would assume that
normally such wrappers take their own control arguments in the form of
keyword-only arguments (that are unlikely to conflict with arguments
of the wrapped method).

> > Perhaps we can use ** without following identifier to signal this?
> > It's not entirely analogous to * without following identifier, but at
> > least somewhat similar.
>
> I'm certainly not opposed to going this way, but I don't think it
> would solve the problem above since you still need to take keyword
> arguments.

Can you elaborate?

-- 
--Guido van Rossum (home page: http://www.python.org/~guido/)
_______________________________________________
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

Reply via email to