在以下代码中:
from typing import List
def test() -> List[str]:
ret = ["Hi", "Hi"]
return ret
我在功能定义行上收到以下警告:
Expected type 'Integral", got 'str' instead
我无法理解为什么IntelliJ-IDEA的python模块会将这个简单函数解释为返回Integral而不是str的列表。这是一个类型检查错误吗?
答案 0 :(得分:1)
Pycharm只对类型提示有一些初步支持。
答案 1 :(得分:0)
请注意,typing.List
是一个简单的包装类,扩展内置list
类。它有助于类型提示,并且不允许使用自己创建new
列表。
以下是typing.List
的当前代码:
class List(list, MutableSequence[T], extra=list):
__slots__ = ()
def __new__(cls, *args, **kwds):
if _geqv(cls, List):
raise TypeError("Type List cannot be instantiated; "
"use list() instead")
return _generic_new(list, cls, *args, **kwds)
通过执行typing.List[str]
,您尝试在对象__getitem__
(这是一种类型)上调用方法typing.List
。另请注意
这转化为以下内容:
typing.List.__getitem__(str)
# or
list.__getitem__(str)
现在,如果您看到列表索引方法所期望的内容,它需要一个像a[0], a[1]
这样的整数。在这种情况下,它不是像int
0, 1
那样,而是收到 类型 str
希望这能让您更全面地了解typing.List
。