from typing import Optional, Union import google.api_core.future.polling # type: ignore #class A(google.api_core.future.polling.PollingFuture): class A: pass class B(A): pass class C(A): pass def subfunc(arg: Optional[str]) -> Union[B, C]: if arg is None: return B() else: return C() def func_invalid() -> B: r = B() r = subfunc("arg") return r def func_correct() -> B: r = B() r2 = subfunc("arg") assert isinstance(r2, B) return r2 func_invalid() func_correct()