Python中如何为queue.Queue定义元素类型以支持类型提示?
给queue.Queue指定元素类型以获得类型提示支持
有三种方式可以解决你的问题,让编辑器能识别队列元素的类型,恢复自动补全和语法检查功能:
1. Python 3.9+ 直接用原生泛型标注
从Python 3.9开始,标准库的queue.Queue支持泛型类型标注,你可以直接按预想的方式写:
import queue def run(command_queue: queue.Queue[PlantCommand], status: PlantStatus) -> None: logging.debug('Plant thread started.') while True: try: _cmd = command_queue.get_nowait() # 现在输入_cmd.就能得到PlantCommand的属性提示了 if _cmd.command == PlantCommand.TERMINATE: break except queue.Empty: pass
2. Python 3.8及以下版本,使用typing模块的Queue
如果你的Python版本低于3.9,需要从typing模块导入泛型版本的Queue:
from typing import Queue import queue def run(command_queue: Queue[PlantCommand], status: PlantStatus) -> None: logging.debug('Plant thread started.') while True: try: _cmd = command_queue.get_nowait() if _cmd.command == PlantCommand.TERMINATE: break except queue.Empty: pass
3. 局部类型断言(适合无法修改函数参数标注的场景)
如果没法改动函数的参数类型注解,也可以在取出元素时手动指定类型:
def run(command_queue: queue.Queue, status: PlantStatus) -> None: logging.debug('Plant thread started.') while True: try: # 用类型断言指定_cmd的类型 _cmd: PlantCommand = command_queue.get_nowait() if _cmd.command == PlantCommand.TERMINATE: break except queue.Empty: pass
这三种方式都能让编辑器识别_cmd是PlantCommand的实例,自动补全、语法高亮检查就能正常工作了。
内容的提问来源于stack exchange,提问作者paul_schaefer
相关产品推荐
相关产品推荐

