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

Python 3.6中如何为函数参数指定多类型静态类型检查?

解决Python 3.6中函数参数多类型标注的问题

刚接触Python类型提示的话,确实会遇到这种语法误区~你之前用def foo(x: [Point, Dot])的写法是不对的,因为方括号在这里会被解析成「参数x是一个包含Point/Dot实例的列表」,而不是「x可以是Point或Dot类型」。针对你的需求,有合适的实现方式,适配Python 3.6的话优先用下面这种:

方法1:使用typing.Union(Python 3.5+支持)

Python 3.6还不支持3.10才引入的|联合类型语法,所以需要从标准库的typing模块导入Union来实现「参数可以是多个类型之一」的标注:

from typing import Union

class Point:
    pass

class Dot:
    pass

def foo(x: Union[Point, Dot]) -> None:
    # 这里写你的函数逻辑
    print("参数类型符合要求")

这样静态类型检查工具(比如mypy)就会识别:传入foo的参数必须是Point或Dot的实例,其他类型会触发检查警告,完全满足你的需求,不用拆分两个函数。

额外小提示

  • 如果你后续升级到Python 3.10+,可以简化成更直观的写法:def foo(x: Point | Dot) -> None:,效果和Union完全一致。
  • 要是你想让Point和Dot共享一套方法规范,也可以考虑定义抽象基类(ABC)或者协议(Protocol,需要Python 3.8+或安装typing-extensions兼容旧版本),不过这属于进阶用法,你的需求用Union就足够解决了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:20:53