如何推断 MyPy/Pyright 中可迭代对象中第一个元素的类型?
有什么方法可以将下面的代码注释到更窄的范围吗? 这意味着我希望类型检查器假设下面的函数返回可迭代或列表中包含的类型的对象。
from typing import Iterable, TypeVar
T = TypeVar('T')
def get_first(iterable: Iterable[T]) -> T | None:
for item in iterable:
return item
return None
例如:
class Bob:
pass
ll : List[Bob] = [Bob(), Bob()] # Create a list that contains objects of type Bob
first_bob = get_first(ll) # <--- Type checker should infer that the type of first_bob is Bob
我正在寻找专门适用于 MyPy/Pyright 的解决方案。
这是不可能的。 “有第一个元素”不是
ll
静态类型的一部分。需要比简单的静态类型检查更深入的分析才能确定 first_bob
不是 None
。