在Pycharm中,以下代码会产生一个警告:
为什么?我不能将两个混合了类型提示的列表连接起来吗?
from typing import List
list1: List[int] = [1, 2, 3]
list2: List[str] = ["1", "2", "3"]
list3: List[object] = list1 + list2
# ↳ Expected type List[int] (matched generic type List[_T]),
# got List[str] instead.
为什么?我不能将两个混合了类型提示的列表连接起来吗?
list1
和list2
的注释也标记为List[object]
类型,会发生什么?这将使你的程序至少在mypy下进行类型检查——也许它还能满足Pycharm。 - Michael0x2alist1
和list2
本身没有类型提示,而是分配了具有提示返回类型的函数的输出(例如def gli() -> List[int]: return [1, 2, 3]
然后list1 = gli()
),我仍然会收到警告。如果这些函数是库代码怎么办?为什么连接它们的输出会有问题? - Cailist.__add__
的签名(标准库类型提示的规范集合)。类型签名可能会更加广泛(例如,重载以接受List[S]
并返回List[Union[T, S]]
),但我怀疑在实践中这种情况并不太有用,并且会使那些想要严格同类列表或想要对其进行子类化的人生活更加困难。 - Michael0x2a