This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author JelleZijlstra
Recipients AlexWaygood, JelleZijlstra, gvanrossum, kj, sobolevn
Date 2022-02-21.19:58:17
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <[email protected]>
In-reply-to
Content
Currently, the implementation of @overload (https://github.com/python/cpython/blob/59585d6b2ea50d7bc3a9b336da5bde61367f527c/Lib/typing.py#L2211) simply returns a dummy function and throws away the decorated function. This makes it virtually impossible for type checkers using the runtime function object to find overloads specified at runtime.

In pyanalyze, I worked around this by providing a custom @overload decorator, working something like this:

_overloads: dict[str, list[Callable]] = {}

def _get_key(func: Callable) -> str:
    return f"{func.__module__}.{func.__qualname__}"

def overload(func):
    key = _get_key(func)
    _overloads.setdefault(key, []).append(func)
    return _overload_dummy

def get_overloads_for(func):
    key = _get_key(func)
    return _overloads.get(key, [])

A full implementation will need more error handling.

I'd like to add something like this to typing.py so that other tools can also use this information.
History
Date User Action Args
2022-02-21 19:58:17JelleZijlstrasetrecipients: + JelleZijlstra, gvanrossum, sobolevn, kj, AlexWaygood
2022-02-21 19:58:17JelleZijlstrasetmessageid: <[email protected]>
2022-02-21 19:58:17JelleZijlstralinkissue46821 messages
2022-02-21 19:58:17JelleZijlstracreate