21 lines
582 B
Python
21 lines
582 B
Python
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 != '<locals>':
|
|
cls = getattr(cls, name, None)
|
|
if not inspect.isclass(cls):
|
|
return None
|
|
return cls
|