
On Mon, Aug 03, 2020 at 05:51:58PM -0400, Ricky Teachey wrote:
However I'll also point out that another idea from Jonathan Fine has the potential to fix both this problem and the key object signature problem, which is what he called a "SIGNATURE CHANGING ADAPTER".
Here's how it goes. First we write class D: @wibble def __setitem__(self, val, u, v, x, y): pass # Or do something.
Next, we define wibble. It will be a SIGNATURE CHANGING ADAPTER. Those who know how to make decorators will, I hope, have little difficulty in defining wibble to do what is required. For this exercise, assume that k.argv = (1, 2), and k.kwargs = dict(x=3, y=4).
Good news! Thanks to Guido's time machine, Python already supports this signature changing adapter for functions and methods. All you have to do is *leave the decorator out*. In fact you don't even have to define it at all. The Python interpreter already knows how to match up keyword arguments like `u=35` and their associated parameters `u`. So we don't have to duplicate the argument parsing logic of the interpret in a decorator. We just have to let the interpreter do its thing like it already does. This is (almost) as flexible as you want: Want your keyword arguments to be optional? Define them with a default. Want them to be mandatory? No default. Want to accept arbitrary keyword arguments? Include a `**kwargs` parameter. Want all of your keywords bundled together? Use only a `**kwargs` parameter. The only limitation is that subscripting syntax bundles all positional arguments into a single parameter, for reasons lost deep in the mists of time. But that doesn't affect keyword parameters. -- Steven