是的,我知道 Enum 但我对使用它不感兴趣。
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”不兼容
我做错什么了?
一种暗示 SomeClass 意味着值应该是 某个阶级 ,不是类变量 某个阶级 “。”什么之中的一个 某个阶级 's class variables“不是一个类型,并且没有可用于该含义的注释。
SomeClass
某个阶级
这种情况的stdlib解决方案是 enum.Enum ,但你拒绝了。在这种情况下,接下来最好的事情是 typing.Literal 类型,在Python3.8中引入。有了它,你可以写
enum.Enum
typing.Literal
SomeClassValue = typing.Literal['regular', 'important', 'accounts', 'special'] def do_something(*, queue_name: SomeClassValue): ...
你 不能 以某种方式从 某个阶级 ;它可能会运行,但不会键入check。这意味着如果你走这条路,你将不得不有很多容易出错的代码重复。(另外,您可能需要 Literal 类变量上的注释-我不知道将为这些变量推断什么类型。)
Literal