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

Mypy中如何标记元组剩余返回元素的类型为未知?

解决方案

1. 用Any兜底(最简单快速的方式)

如果不需要精确标注剩余元素的类型,只需要明确前两个元素的类型,可以直接用Tuple[int, str, Any, ...]。这里的...表示后续可以跟随任意数量的任意类型元素,完美适配父类返回值不确定的场景:

from typing import Tuple, Any

def _parse(input_dict: dict) -> Tuple[int, str, Any, ...]:
    entity = 3
    _id = "test"
    return (entity, _id, *super()._parse(input_dict))

2. 用Unpack拼接父类返回类型(精确且易维护)

如果想要更精确的类型标注,同时避免手动重复父类的返回类型定义,可以使用Unpack(Python 3.11内置,旧版本可通过typing_extensions.Unpack引入)结合ReturnType自动继承父类的返回类型:

from typing import Tuple, ReturnType
from typing_extensions import Unpack

class Parent:
    def _parse(self, input_dict: dict) -> Tuple[int, str]:
        return 1, "parent_id"

class Child(Parent):
    def _parse(self, input_dict: dict) -> Tuple[int, str, Unpack[ReturnType[Parent._parse]]]:
        entity = 3
        _id = "test"
        return (entity, _id, *super()._parse(input_dict))

这种方式下,父类_parse的返回类型变更时,子类标注会自动同步,多层继承场景下只需替换Parent为直接父类即可。

3. 定义类型别名(统一维护更高效)

如果多个子类都需要类似的返回类型标注,可以先定义一个类型别名,后续调整时只需修改别名定义:

from typing import Tuple, Any

# 统一定义返回类型:前两个为int、str,后续为任意数量的任意类型
ParseResult = Tuple[int, str, Any, ...]

class Child(Parent):
    def _parse(self, input_dict: dict) -> ParseResult:
        entity = 3
        _id = "test"
        return (entity, _id, *super()._parse(input_dict))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 00:35:04