打字模块提供了一些方便的功能,以提高可读性,并更加确信所输入代码的正确性.
最好的功能之一是您可以编写类似下面的内容来描述具有指定元素类型的输入字典.
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线上的错误.
最佳答案 如果您正在编写自己的容器类型并希望以与键入.Dict和其他类型相同的方式对其进行参数化,则应使用typing.Generic作为基础之一(以TypeVar作为其参数):
from typing import TypeVar, Generic, Iterable
T = TypeVar('T')
class MyContainer(Generic[T]):
def __init__(self, iterable:Iterable[T]):
...
def foo(self) -> T:
...
def some_function(arg: MyContainer[str]) -> str:
return arg.foo()