在python 3.7中,如何检查x = typing.List [str]是“ of”类型。List?

时间:2018-09-08 20:08:23

标签: typing python-3.7

我将类型信息存储在变量x中:

x = typing.List[str]

稍后,此xx_value一起传递,我想根据x 是否为 typing.List来切换逻辑。我知道typing不应与isinstanceissubclass一起使用,因此我说issubtype是否有任何标准的,未来的证明(以及Python 3.6证明)?

import sys
from typing import List


def issubtype(sub_type, parent_type):
    if sys.version_info >= (3, 7):
        if not hasattr(sub_type, '__origin__') or not hasattr(parent_type, '__origin__'):
            return False

        if sub_type.__origin__ != parent_type.__origin__:
            return False

        if isinstance(parent_type.__args__[0], type):
            return sub_type.__args__ == parent_type.__args__

        return True

    else:
        if not hasattr(sub_type, '__extra__') or not hasattr(parent_type, '__extra__'):
            return False

        if sub_type.__extra__ != parent_type.__extra__:
            return False

        if not parent_type.__args__ or parent_type.__args__ == sub_type.__args__:
            return True

    return False


assert issubtype(List[str], List[str])
assert issubtype(List[str], List)
assert issubtype(List[int], List[int])
assert not issubtype(List[int], List[str])

当尝试实现此功能时,我意识到任何好的解决方案都必须递归地检查args(我的尝试没有做,但是对我来说,仅知道某物是否为列表就足够了。)

0 个答案:

没有答案