Python,如何推断可迭代中第一个元素的类型?

问题描述 投票:0回答:1

如何推断 MyPy/Pyright 中可迭代对象中第一个元素的类型?

有什么方法可以将下面的代码注释到更窄的范围吗? 这意味着我希望类型检查器假设下面的函数返回可迭代或列表中包含的类型的对象。

from typing import Iterable, List, TypeVar

T = TypeVar('T')

def get_first(iterable: Iterable[T] | List[T]) -> T | None:
    for item in iterable:
        return item
    return None

例如:

class Bob:
    pass

ll = [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 的解决方案。

python generics types mypy
1个回答
0
投票

这是不可能的。 “有第一个元素”不是

ll
静态类型的一部分。需要比简单的静态类型检查更深入的分析才能确定
first_bob
不是
None

© www.soinside.com 2019 - 2024. All rights reserved.