You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何为返回固定键字典的函数设置正确返回类型提示

你尝试的Dict['Room':float, 'CPU':float, 'hum':float]写法不符合Python类型标注规范,Dict泛型仅支持传入「键的统一类型」和「值的统一类型」两个参数,你写的冒号表达式会被识别为切片语法,因此会出现悬停显示Dict[slice, slice, slice]的问题。

该需求完全可以实现,推荐以下两种实现方案:


方案1:使用TypedDict(最优适配你的场景)

TypedDict是Python专门用来标注固定键、每个键对应值类型可单独指定的字典的类型工具,Python 3.8及以上版本内置在typing模块中,完全兼容普通字典的JSON序列化逻辑,不需要额外转换。

用法示例:

from typing import TypedDict

# 先定义固定结构的字典类型
class TempInfo(TypedDict):
    Room: float
    CPU: float
    hum: float

# 标注到函数返回值即可
def getTemps(self) -> TempInfo:
    """
    get room and cpu temperature in °C as well as humidity in %
    """
    # 向服务端发送温度请求
    msg = {'type':'req', 'reqType':'temps'}
    self.send(msg)

    res = self.recieve()    # 获取响应

    return res

标注完成后VS Code可以准确识别返回字典的每个键名和对应值类型,写错键名、赋值类型不符都会有实时提示。
如果你的Python版本低于3.8,可安装typing_extensions包后,从typing_extensions导入TypedDict使用。


方案2:使用dataclass(适合偏好属性访问的场景)

如果你接受用属性访问代替字典键访问,也可以用dataclass实现,需要序列化时转成普通字典即可:

from dataclasses import dataclass, asdict
import json

@dataclass
class TempInfo:
    Room: float
    CPU: float
    hum: float

def getTemps(self) -> TempInfo:
    msg = {'type':'req', 'reqType':'temps'}
    self.send(msg)
    res = self.recieve()
    # 把接口返回的字典转为dataclass实例返回
    return TempInfo(**res)

# 需要JSON序列化时调用asdict转换
temp_data = xxx.getTemps()
json_str = json.dumps(asdict(temp_data))

内容的提问来源于stack exchange,提问作者Nilusink

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 09:45:00