Как я могу проверить, является ли один тип производным от другого (модуль ввода Python) - PullRequest
0 голосов
/ 28 октября 2019

Например, я хочу

from typing import Dict, List
check_derived(Dict[int, int], Dict) == True
check_derived(List[str], List) == True
check_derived(List, Dict) == False

и т. Д.

Нужно ли мне писать собственное отображение производных классов в классы, чтобы достичь этого? Кажется хаки.

1 Ответ

0 голосов
/ 29 октября 2019

Спасибо @ 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
...