检查列表类型是否为类型别名

Check if list type of type alias

假设您有一个函数,使用 Enum 子类提示类型:

def x(p: CreditScore):
  pass

那么你可以这样做:

import inspect
from enum import Enum

sig = inspect.signature(x)
annot = sig.parameters.get('p').annotation
>>> issubclass(annot, Enum)
True

但是,如果它是一个枚举列表,您将如何检查它呢?

def x(p: List[CreditScore]):
  pass

您可以通过 typing.get_args() 来完成此操作,对于 X[Y, Z, ...] returns 元组 (Y, Z, ...).

形式的键入对象
sig = inspect.signature(x)
annot = sig.parameters.get('p').annotation
annot_args = typing.get_args(annot)
print(issubclass(annot_args[0], Enum))