gpt4 book ai didi

Python:如何对类变量进行类型提示?

转载 作者:太空宇宙 更新时间:2023-11-04 11:09:47 25 4
gpt4 key购买 nike

是的,我知道 Enum 类,但我对使用它不感兴趣。

这是我的类枚举:

class SomeClass:
SOME_STRING = "regular"
SOME_STRING2 = "important"
SOME_STRING3 = "accounts"
SOME_STRING4 = "special"

这是我的类型提示函数:

def do_something(*, queue_name: SomeClass):
#....

当我这样调用它时:

purge_queue(queue_name=SomeClass.SOME_STRING)

我收到警告:

Argument of type 'Literal['regular']' cannot be assigned to parameter 'queue_name' of type 'SomeClass' 'str' is incompatible with 'SomeClass'

我做错了什么?

最佳答案

SomeClass 的类型提示意味着值应该是 SomeClass 的实例,而不是 SomeClass 的类变量。 “SomeClass 的类变量之一”不是类型,并且没有可用于该含义的注释。

这种事情的 stdlib 解决方案是 enum.Enum,但您拒绝了它。在那种情况下,下一个最好的是 typing.Literal类型,在 Python 3.8 中引入。有了它,你可以写出类似的东西

SomeClassValue = typing.Literal['regular', 'important', 'accounts', 'special']

def do_something(*, queue_name: SomeClassValue):
...

不能以某种方式从SomeClass 的类变量中提取类型参数;它可能会运行,但不会进行类型检查。这意味着如果你沿着这条路走下去,你将不得不有很多容易出错的代码重复。 (此外,您可能需要在您的类变量上添加 Final 注释,以表明它们不应该被重新分配。)

关于Python:如何对类变量进行类型提示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58567311/

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