gpt4 book ai didi

python - 打字,自定义集合类型

转载 作者:太空宇宙 更新时间:2023-11-03 11:21:03 28 4
gpt4 key购买 nike

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 行上有错误。

最佳答案

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

关于python - 打字,自定义集合类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42958617/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com