
On Thu, May 27, 2021 at 2:00 PM micro codery <ucodery@gmail.com> wrote:
...
By providing the name as the first argument, all
of my examples of callables currently in the standard library will work as you say out of the box. If it were to be passed in last, this new syntax would not be usable by any standard library callable (or even third party? Does anyone create factory functions that need the name and take it last?) and lots of new functions would have to be added.
Regards, ~Jeremiah
Yes that's true. I originally wrote the proposal with the arguments switched around. But I it seemed like it could be important to have the decorated_object argument appear first in the signatures for both __call__ and __decoration_call__, or it could cause confusion... However, I am open to the idea I was right the first time. If so, the default implementation at the top of the object food chain would be something like (using Matt's SENTINEL idea): def __decoration_call__(self, by_name, obj=SENTINEL): if func is SENTINEL: return self(by_name) return self(obj) On the one hand, this might be too expensive; an identity check and potentially two function calls occur for all @ decorations. And I don't see how to optimize this away with opcodes... On the other hand, how often are people invoking millions of @ decorations in a loop...? --- Ricky. "I've never met a Kentucky man who wasn't either thinking about going home or actually going home." - Happy Chandler