On Tue, Jun 1, 2021 at 10:16 PM Steven D'Aprano <[email protected]> wrote:
> The only slightly awkward case is the bare variable case. Most of the
> time there will be no overlap between the function/class decorators and
> the bare variable decorator, but in the rare case that we need to use a
> single function in both cases, we can easily distinguish the two cases:
>
> def mydecorator(arg, **kwargs):
> if isinstance(arg, str):
> # must be decorating a variable
> ...
> else:
> # decorating a function or class
> assert kwarg == {}
>
> So it is easy to handle both uses in a single function, but I emphasise
> that this would be rare. Normally a single decorator would be used in
> the function/class case, or the variable case, but not both.
>
I can't imagine any situation where you would *want* this, but it is
actually possible for a decorator to be given a string:
>>> def mydecorator(arg, **kwargs):
... if isinstance(arg, str):
... print("Decorating a variable can't happen, right?")
... else:
... print("Good, we're decorating a function.")
... return arg
...
>>> @mydecorator
... @str
... def f(): ...
...
Decorating a variable can't happen, right?
>>>
This probably falls under "you shot yourself in the foot, so now you
have a foot with a hole in it".
ChrisA
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/YAQENPUEEOQGPUUHG6ST3L4IEXOQM4X4/
Code of Conduct: http://python.org/psf/codeofconduct/