键入,自定义集合类型

2024-10-01 00:18:38 发布

您现在位置:Python中文网/ 问答频道 /正文

typing模块提供了一些方便的特性,可以更好地提高可读性和对类型化代码正确性的信心。在

其中一个最好的特性是,您可以编写类似下面的代码来描述具有指定元素类型的输入字典。在

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

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

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

我可以做一些类似的事情:

^{pr2}$

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

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

我不清楚Typevar是否应该这样工作。编辑:为了清楚起见,上面的代码不起作用,TypeVar行出现错误。在


Tags: 代码typing类型字典defcounter运算符pass
1条回答
网友
1楼 · 发布于 2024-10-01 00:18:38

如果您正在编写自己的容器类型,并希望以typing.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()

相关问题 更多 >