Python 在具有可迭代属性的对象列表上键入嵌套迭代器

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

我有一个有点棘手的 python 打字问题。我有一个函数(生成器),它迭代对象列表,然后迭代每个对象的特定属性,如下所示:

T = TypeVar('T')
S = TypeVar('S')

def iter_attribute(outer: Iterable[T], attribute: str) -> Iterable[S]:
    for item in outer:
        yield from getattr(item, attribute)

我如何正确地传达

T
应该有一个名为
attribute
的可迭代属性来生成
S
对象这一事实?顺便说一句,mypy 对此非常满意,但没有意识到这一点:

class A:
    a: str
    def __init__(self, a: str):
        self.a = a

a: str
for a in iter_attribute([A('a'), A('b'), A('c')], 'b'):
    print(a)

我该如何正确输入这个?

python mypy python-typing
1个回答
0
投票

你不能。

attribute
是动态的,因此无法在静态类型中表达。

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