Steven Bethard wrote: > ------------------------- > UserDict.DictMixin.update > ------------------------- ... > To clean this up, we'd need the ability to identify self and dict as > positional only arguments. AFAICT, the current proposal doesn't solve > this problem. Off the top of my head, I don't see an easy way of > supporting this either...
One way would be to expand assignment to support positional argument to parameter matching when the sequence on the left is parenthesised: def __init__(*args, **kwargs): (self, other=None) = args ... The signature info would still be lacking details on self & other, but the kwarg conflict would be addressed. Taking this idea one step further, the info could be moved back into the signature by doing: def __init__(*(self, other=None), **kwargs): ... Which actually suggests an alternate approach for keyword-only arguments: permitting argument expansion in a tuple after the **. Then you'd have: def f(a, *(b, c=1, *args), **(d, e=2, **kwds)): # Silly function 'a' would be a normal positional-or-keyword argument 'b' would be a required positional-only argument 'c' would be an optional 3rd positional-only argument 'args' would contain any positional arguments after the 3rd 'd' would be a required keyword-only argument 'e' would be an optional keyword-only argument 'kwds' would contain any keyword arguments other than 'a', 'd' or 'e' > ---------------------- > UserDict.DictMixin.pop > ---------------------- ... > you still wouldn't know if "default" was None from the default in the > signature or because the value None was supplied by the caller. Making this distinction is where sentinel objects and identity tests are handy: _pop_sentinel = object() def pop(self, key, default=_pop_sentinel): try: value = self[key] except KeyError: if default is not self._pop_sentinel: return default raise del self[key] return value (IOW, this can be made simpler without touching Python's syntax) Cheers, Nick. -- Nick Coghlan | [EMAIL PROTECTED] | Brisbane, Australia --------------------------------------------------------------- http://www.boredomandlaziness.org _______________________________________________ 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