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/

Reply via email to