Python:通用约束(约束不能通过类型变量进行参数化)

时间:2018-11-06 01:55:33

标签: generics python-3.6 generic-programming typing python-3.7

我想创建一个表示“ X的实例” “ X的Iterable”的灵活类型。实际上,一个或多个类型具有稍微增加了语义糖,因此您可以传递单个实例,而不必将其包装在可迭代中。

这就是我所拥有的:

X = TypeVar('X')

# This works. flex_iter('foo') returns an Iterator[str]
FlexIterable = Union[X, Iterable[X]]
def flex_iter(x: FlexIterable) -> Iterator[X]:
    for item in ([x] if not isinstance(x, Iterable) else x):
        yield item

# This doesn't work -- but I reeeaaally wish it did.
FlexIterable = TypeVar('FlexIterable', X, Iterable[X])
def some_other_func_that_uses_ints(x: FlexIterable[int]):
    pass

在第二种情况下,Pycharm类型检查器针对Constraints cannot be parameterized by type variablesFlexIterable = TypeVar('FlexIterable', X, Iterable[X])

有人找到解决办法吗?还是有人看到我可以如何更好地构造它?

0 个答案:

没有答案