[Python-ideas] Keyword only argument on function call
Steven D'Aprano
steve at pearwood.info
Tue Sep 11 08:20:39 EDT 2018
On Tue, Sep 11, 2018 at 08:53:55PM +1000, Steven D'Aprano wrote:
[...]
> Or perhaps we could have an officially blessed way to give tools a hint
> as to what the real signature is.
>
> class Child(Parent):
> @signature_hint(Parent.method)
> def method(self, **kwargs):
> pass
Here's an untested implementation:
import inspect
def signature_hint(callable_or_sig, *, follow_wrapped=True):
if isinstance(callable_or_sig, inspect.Signature):
sig = callable_or_sig
else:
sig = inspect.signature(callable_or_sig, follow_wrapped=follow_wrapped)
def decorator(func):
func.__signature_hint__ = sig
return func
return decorator
inspect.signature would need to become aware of these hints too:
def f(a, b=1, c=2):
pass
@signature_hint(f)
def g(*args):
pass
@signature_hint(g)
def h(*args):
pass
At this point h.__signature_hint__ ought to give
<Signature (a, b=1, c=2)>
(Note that this is not quite the same as the existing follow_wrapped
argument of inspect.signature.)
This doesn't directly help Ander's problem of having to make calls like
func(a=a, b=b, c=c) # apologies for the toy example
but at least it reduces the pain of needing to Repeat Yourself when
overriding methods, which indirectly may help in some (but not all) of
Ander's cases.
--
Steve
More information about the Python-ideas
mailing list