It might be stupid, but how about solving this problem using the following:
from . import other_func, SomeClass
def my_func(a=other_func.defaults.a, b=other_func.defaults.b,
c=SomeClass.some_method.defaults.c):
...
or
def my_func(a=None, b=None, c=None): # or use some sentinel value
instead of None
if a is None:
a = other_func.defaults.a
if b is None:
b = other_func.defaults.b
if c is None:
c = SomeClass.some_method.defaults.c
...
or even
def my_func(a=None, b=None, c=None):
if a is None:
a = default(other_func, "a")
if b is None:
b = default(other_func, "b")
if c is None:
c = default(SomeClass.some_method, "c")
...
I used *.defaults.* but it might be something else, as well as the
function I named 'default' which might be anything else.
I prefer the first, as it's both short and easy to read, but I'm not
sure about the implications about such a thing. And it probably has
already been proposed for other use cases.
The second and third versions are more verbose, but probably easier to
implement, specially the third which should already be doable using
something like
import inspect
def default(function, argument):
return inspect.signature(function).parameters[argument].default.
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/