打字,自定义集合类型

时间:2017-03-22 17:21:53

标签: python counter typing

输入模块提供了一些方便的功能,以提高可读性,并对输入的代码的正确性更有信心。

最好的功能之一是您可以编写类似下面的内容来描述具有指定元素类型的输入字典。

def myFun(inputDict:Dict[str, int]): pass

现在我想知道,这可以“扩展”到自定义类型吗?是否可以以正式的方式提供自定义类型(其作用类似于容器)以告知潜在的类型检查器内容必须是特定类型的?

例如collections.Counter类? - 当我真正想要一个计数器时,上面的约束将不起作用,因为字典不提供计数器所在的加法运算符。

我可以这样做:

def myFun(inputDict:collections.Counter): pass

但后来我失去了关于柜台储存什么的信息。 - 在这里使用TypeVar正确的方法吗?

CounterTy = typing.TypeVar("CounterTy", collections.Counter)
def myFun(inputDict:CounterTy[str]): pass

我不清楚Typevar是否应该以这种方式工作。编辑:只是要清楚,上面的代码不起作用,TypeVar行上的错误。

1 个答案:

答案 0 :(得分:2)

如果您正在编写自己的容器类型,并希望以typing.Dict和其他类型的方式对其进行参数化,则应使用typing.Generic作为您的基础之一(使用{{ 1}}作为参数):

TypeVar