检查类型是否为列表

时间:2018-07-29 07:14:51

标签: python python-3.6 typing

我有一些类型(来自var $loading = $('#loadingDiv').hide(); $(document).ajaxStart(function () { $loading.show(); }) .ajaxStop(function () { $loading.hide(); }); -> inspect.signature),我想检查它们是否为列表。我当前的解决方案有效,但是非常难看,请参见下面的最小示例:

inspect.Parameter

检查类型是否为from typing import Dict, List, Type, TypeVar IntList = List[int] StrList = List[str] IntStrDict = Dict[int, str] TypeT = TypeVar('TypeT') # todo: Solve without using string representation of type def is_list_type(the_type: Type[TypeT]) -> bool: return str(the_type)[:11] == 'typing.List' assert not is_list_type(IntStrDict) assert not is_list_type(int) assert not is_list_type(str) assert is_list_type(IntList) assert is_list_type(StrList) 的正确方法是什么?

(我使用的是Python 3.6,该代码应在通过List的检查后仍然可以保存。)

1 个答案:

答案 0 :(得分:1)

您可以使用issubclass来检查以下类型:

from typing import Dict, List, Type, TypeVar

IntList = List[int]
StrList = List[str]
IntStrDict = Dict[int, str]

TypeT = TypeVar('TypeT')

# todo: Solve without using string representation of type
def is_list_type(the_type: Type[TypeT]) -> bool:
    return issubclass(the_type, List)

assert not is_list_type(IntStrDict)
assert not is_list_type(int)
assert not is_list_type(str)
assert is_list_type(IntList)
assert is_list_type(StrList)