Is it really worth it? Fact is, while it can shave off some lines of code, I think it is interesting to know _which_ lines of code -
Usually when one writes a decorator, it is expected that they will know what they are writing, and will want to be in control of their code. Delegating this to a decorator-decorator that is to be copied and pasted, and will definitely change call-order, and when your decorator is called, is something that I, at least, would be wary to use. Meanwhile, when I want this pattern, it really takes me 2 LoC inside the decorator to have the same functionality, and still be 100% in control of when my function is called: ``` from functools import partial def mydecorator(func=None, /, *, param1=None, **kwargs): if func is None: return partial(mydcorator, param1=None, **kwargs) # decorator code goes here ... ``` So, yes, your proposal has some utility - but I consider it to be marginal - it is the kind of stuff that I'd rather see on a 3rdy party package with extra-stuff to help building decorators than on stdlib. On Mon, 30 Nov 2020 at 17:04, Yurii Karabas <1998uri...@gmail.com> wrote: > The idea of `decorator_factory` is to eliminate boilerplate code that used > to create a decorator with parameters. > > A perfect example is how `dataclass` decorator can be simplified from this: > ``` > def dataclass(cls=None, /, *, init=True, repr=True, eq=True, order=False, > unsafe_hash=False, frozen=False): > def wrap(cls): > return _process_class(cls, init, repr, eq, order, unsafe_hash, > frozen) > > # See if we're being called as @dataclass or @dataclass(). > if cls is None: > # We're called with parens. > return wrap > > # We're called as @dataclass without parens. > return wrap(cls) > ``` > To this: > @functools.decorator_factory > def dataclass(cls, /, *, init=True, repr=True, eq=True, order=False, > unsafe_hash=False, frozen=False): > return _process_class(cls, init, repr, eq, order, unsafe_hash, frozen) > ``` > _______________________________________________ > Python-ideas mailing list -- python-ideas@python.org > To unsubscribe send an email to python-ideas-le...@python.org > https://mail.python.org/mailman3/lists/python-ideas.python.org/ > Message archived at > https://mail.python.org/archives/list/python-ideas@python.org/message/NMCDVBOYFXEKZ4L3ASLNYL2NBATJ3VCX/ > Code of Conduct: http://python.org/psf/codeofconduct/ >
_______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/OU4VVMBE74KXK6HF6G7LEFP735AJM4G2/ Code of Conduct: http://python.org/psf/codeofconduct/