import inspect import sys from typing import Callable def find_class(func: Callable): """ basé sur inspect._findclass mais plus robuste et qui prend en compte les fonctions locales note : la fonction doit avoir un module sinon None est renvoyé (ex : str => None) """ cls = sys.modules.get(getattr(func, '__module__', None)) if cls is None: return None for name in func.__qualname__.split('.')[:-1]: if name != '': cls = getattr(cls, name, None) if not inspect.isclass(cls): return None return cls