Let's say we have a trivial function that calls open()
but with a fixed argument:
def open_for_writing(*args, **kwargs):
kwargs['mode'] = 'w'
return open(*args, **kwargs)
If I now try to call open_for_writing(some_fake_arg = 123)
, no type checker (e.g. mypy) can tell that this is an incorrect invocation: it's missing the required file
argument, and is adding another argument that isn't part of the open
signature.
How can I tell the type checker that *args
and **kwargs
must be a subset of the open
parameter spec? I realise Python 3.10 has the new ParamSpec
type, but it doesn't seem to apply here because you can't get the ParamSpec
of a concrete function like open
.