Steven Bethard <[EMAIL PROTECTED]> wrote: > > Martin v. Löwis wrote: > > So I would propose the syntax > > > > lst.sort(key=virtual.lower) # where virtual is functional.virtual > > Shane Hathaway wrote: > > class virtual: > > def __getattr__(self, name): > > return lambda obj: getattr(obj, name)() > > virtual = virtual() > > I think (perhaps because of the name) that this could be confusing. I > don't have any intuition that "virtual.lower" would return a function > that calls the "lower" attribute instead of returning a function that > simply accesses that attribute. > > If we're going to move away from the itemgetter() and attrgetter() > style, then we should be consistent about it and provide a solution > (or solutions) that answers all of these problems: > obj.attr > obj.attr(*args, **kwargs) > obj[key] > I'm not sure that there is a clean/obvious way to do this.
I thought that: operator.attrgetter() was for obj.attr operator.itemgetter() was for obj[integer_index] That's almost all the way there. All that remains is to have something that gets any key (not just integers) and which handles function calls. In terms of the function call semantics, what about: class methodcall: def __getattr__(self, name, *args, **kwds): def delayedcall(obj): return getattr(obj, name)(*args, **kwds) return delayedcall methodcall = methodcall() - Josiah _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com