我有一个有点棘手的 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)
我该如何正确输入这个?
你不能。
attribute
是动态的,因此无法在静态类型中表达。