社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

zerohedge • 7 年前 • 1881 次点击  

是的,我知道 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 类变量上的注释-我不知道将为这些变量推断什么类型。)