Спасибо @ Green Clock Guy, похоже, это сработало!
import inspect
from typing import Dict, List
def check_derived(left, right):
"""True if left derived from right"""
left_classes = inspect.getmro(left)
return right in left_classes
assert check_derived(Dict[int, int], Dict) == True
assert check_derived(List[str], List) == True
assert check_derived(List, Dict) == False
Редактировать: Однако я вижу, что это не так для случая
assert check_derived(Union[str, int], int) == True