我有一个函数,它len在其中一个参数上使用函数并迭代参数.现在我可以选择是否使用Iterable或使用注释类型Sized,但两者都会出错mypy.
from typing import Sized, Iterable
def foo(some_thing: Iterable):
print(len(some_thing))
for part in some_thing:
print(part)
Run Code Online (Sandbox Code Playgroud)
给
error: Argument 1 to "len" has incompatible type "Iterable[Any]"; expected "Sized"
Run Code Online (Sandbox Code Playgroud)
而
def foo(some_thing: Sized):
...
Run Code Online (Sandbox Code Playgroud)
给
error: Iterable expected
error: "Sized" has no attribute "__iter__"
Run Code Online (Sandbox Code Playgroud)
由于本期没有Intersection讨论,我需要有一些混合类.
from abc import ABCMeta
from typing import Sized, Iterable
class SizedIterable(Sized, Iterable[str], metaclass=ABCMeta):
pass
def foo(some_thing: SizedIterable):
print(len(some_thing))
for part in some_thing:
print(part)
foo(['a', 'b', …Run Code Online (Sandbox Code Playgroud)