gh-89263: Add typing.get_overloads by JelleZijlstra · Pull Request #31716 · python/cpython
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks! I have a few thoughts.
Overall, I guess I'm a little concerned about "dumping" so many new functions in the global functools namespace. functools is already kind of a hodgepodge of unrelated things, and I worry that this will make the problem worse.
Normally I'd say that having a class with 0 instance methods would be a code smell, but what about something like this?
class VariantRegistry: _registry = defaultdict(list) @staticmethod def _get_key_for_callable(func): func = getattr(func, "__func__", func) try: return f"{func.__module__}.{func.__qualname__}" except AttributeError: return None @classmethod def register_variant(func, variant): key = cls._get_key_for_callable(func) if key is not None: cls._variant_registry[key].append(variant) @classmethod def get_variants(cls, func): return cls._registry[cls._get_key_for_callable(func)] @classmethod def clear_variants(cls, func=None): if func is None: cls._variant_registry.clear() else: cls._variant_registry.pop(cls._get_key_for_callable(func), None)