Py学习  »  Python

python:如何输入提示类变量?

zerohedge • 7 年前 • 1895 次点击  

是的,我知道 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)

我得到一个警告:

“literal['regular']”类型的参数不能分配给“someClass”类型的参数“queue\u name” “str”与“someClass”不兼容

我做错什么了?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/47903
文章 [ 1 ]  |  最新文章 7 年前
user2357112
Reply   •   1 楼
user2357112    7 年前

一种暗示 SomeClass 意味着值应该是 某个阶级 ,不是类变量 某个阶级 “。”什么之中的一个 某个阶级 's class variables“不是一个类型,并且没有可用于该含义的注释。

这种情况的stdlib解决方案是 enum.Enum ,但你拒绝了。在这种情况下,接下来最好的事情是 typing.Literal 类型,在Python3.8中引入。有了它,你可以写

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

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

你 不能 以某种方式从 某个阶级 ;它可能会运行,但不会键入check。这意味着如果你走这条路,你将不得不有很多容易出错的代码重复。(另外,您可能需要 Literal 类变量上的注释-我不知道将为这些变量推断什么类型。)