# Code de la lib, pas modifiable class CustomType: foo: str def __init__(self, foo: str): self.foo = foo def lib_func(foo: str) -> CustomType: return CustomType(foo) # Code perso from typing import TypeVar, Generic, Callable, ParamSpec T = TypeVar('T') P = ParamSpec('P') class Wrapper(Generic[P, T]): def __init__(self, func: Callable[P, T]): self.func = func def __call__(self, *args: P.args, **kwargs: P.kwargs) -> T: return self.func(*args, **kwargs) wrapper = Wrapper(lib_func) obj = wrapper('test') reveal_type(obj) # % mypy file.py # file.py:32: note: Revealed type is "file.CustomType" # Success: no issues found in 1 source file