Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从类型类型中提取数据_Python_Python 3.x_Generics_Instanceof_Typing - Fatal编程技术网

Python 从类型类型中提取数据

Python 从类型类型中提取数据,python,python-3.x,generics,instanceof,typing,Python,Python 3.x,Generics,Instanceof,Typing,我在Python中使用类型时遇到了一些问题,除了类型提示之外: 输入导入列表中的>> >>>string_list=['nobody','expected','the','西班牙语','inqusion'] >>>string\u list\u class=list[str] 现在我想 检查string\u list是否符合string\u list\u class 检查string\u list\u class是否为列表 如果是这样,请检查该类,该类是一个类的列表 我发现自己无法实现以下任何

我在Python中使用
类型
时遇到了一些问题,除了类型提示之外:

输入导入列表中的
>>
>>>string_list=['nobody','expected','the','西班牙语','inqusion']
>>>string\u list\u class=list[str]
现在我想

  • 检查
    string\u list
    是否符合
    string\u list\u class
  • 检查
    string\u list\u class
    是否为列表
  • 如果是这样,请检查该类,该类是一个类的列表
  • 我发现自己无法实现以下任何一项:

    >>isinstance(字符串列表、字符串列表类)
    回溯(最近一次呼叫最后一次):
    文件“”,第1行,在
    文件“/usr/local/cillar/python/3.7.0/Frameworks/python.framework/Versions/3.7/lib/python3.7/typing.py”,第708行,在instancecheck中__
    返回自我检查子项检查(类型(obj))
    文件“/usr/local/ceral/python/3.7.0/Frameworks/python.framework/Versions/3.7/lib/python3.7/typing.py”,第716行,在_子类检查中__
    raise TypeError(“下标泛型不能与一起使用”)
    TypeError:下标泛型不能用于类和实例检查
    >>>issubclass(字符串\列表\类,列表)
    回溯(最近一次呼叫最后一次):
    文件“”,第1行,在
    文件“/usr/local/ceral/python/3.7.0/Frameworks/python.framework/Versions/3.7/lib/python3.7/typing.py”,第716行,在_子类检查中__
    raise TypeError(“下标泛型不能与一起使用”)
    TypeError:下标泛型不能用于类和实例检查
    
    在这方面,API也没有真正的帮助。而且API似乎不打算这样使用,但是,我需要使用该功能

    闲逛 我找到了一个答案2,就是

    >>类型(字符串列表类)
    
    很难,我无法访问
    \u genericalia
    我可以自己构建它:

    >\u GenericAlias=type(列表[str])
    >>>isinstance(字符串、列表、类、泛型)
    真的
    
    然而,这似乎根本不是一个好的解决方案,它还为其他类(如
    Collection
    )生成
    True

    对于1.和3.我可以想象用
    repr(type(string_list))
    repr(string_list_class)
    对某个东西进行黑客攻击,并以某种方式将该字符串与某个东西进行比较,但这也不是一个好的解决方案

    但必须有更好的方法来执行此操作

    检查变量是否符合键入对象 要检查
    string\u list
    是否符合
    string\u list\u class
    ,可以使用类型检查库

    来自typeguard导入检查\u类型
    尝试:
    检查类型(字符串列表、字符串列表、字符串列表类)
    打印(“字符串列表符合字符串列表类”)
    除类型错误外:
    打印(“字符串列表不符合字符串列表类”)
    
    检查类型化对象的泛型类型 要检查
    string\u list\u class
    是否为列表类型,可以使用库:

    通过键入检查导入获取来源
    从输入导入列表开始
    获取_原点(列表[str])#->List
    
    您也可以使用private
    \uuuuu origin\uuuuu
    字段,但它没有稳定性保证

    List[str]。uuu origin_uu#->List
    
    检查类型对象的类型参数 要检查类,
    string\u list\u class
    是的列表,您可以再次使用库

    通过键入\u检查导入获取\u参数
    从输入导入列表开始
    断言获取参数(列表[str])[0]==str
    
    和以前一样,如果你喜欢冒险,也可以使用一个私人领域

    List[str]。\uuuu args\uuuu[0]#->str
    
    我明白第1点,但第2点的目的是什么?如果
    string\u list
    符合
    string\u list\u class
    ,那么您已经知道它是一个列表。我不知道第3点应该是什么意思。我想检查
    string\u list\u class
    是否通常是一个列表类型。它可能是
    str
    int的列表
    MyObject
    或其他内容。这与1无关。对于3,我想从
    列表[MyObject]中提取
    MyObject
    。好的,我明白了。但是……我不确定同时问3个基本上不相关的问题是否是个好主意……我同意,但它们不是完全不相关的IMHO,对其中一个或两个问题的回答可以回答其他问题。我找不到解决方案,但如果有,同一来源可能也可以回答其他问题ns.对于第3点,请参见.并可能对第2点有所帮助。值得注意的是,在python 3.9中键入_inspect的许多功能都不起作用。不幸的是,对泛型类型执行运行时检查似乎有点不可靠请参见