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

Python如何通过Mypy实现组合模式下的对象特征静态校验

实现方法

使用Python标准库typing模块提供的Protocol(协议)类即可实现需求。Protocol基于结构子类型(静态鸭子类型)实现类型约束:静态检查工具仅校验传入对象是否具备协议中定义的方法、属性及对应签名,完全不要求对象所属类显式继承协议类,天然适配组合优先的设计模式。

如果你的Python版本低于3.8,需要先安装typing_extensions包,从该包导入Protocol即可,使用逻辑完全一致。

代码示例
from typing import Protocol

# 定义约束协议:仅声明要求的方法/属性结构,无任何业务逻辑耦合
class FooLike(Protocol):
    def do_stuff(self) -> str:
        ...

# 业务类无需继承任何基类,只要实现匹配签名的do_stuff方法就满足约束
class Foo:
    def do_stuff(self) -> str:
        return 'hello'

# 不符合约束的类:缺少要求的do_stuff方法
class InvalidFoo:
    def other_method(self):
        pass

def some_function(obj: FooLike) -> None:
    print(obj.do_stuff())


# 静态校验通过:Foo实例满足协议的结构要求
some_function(Foo())
# 静态校验报错:InvalidFoo实例没有do_stuff方法,不符合约束
some_function(InvalidFoo())
关键特性
  • 无侵入:业务类和协议类完全解耦,不需要通过继承建立关联,不会强制类层级设计
  • 全工具支持:Mypy、Pyright等所有主流Python静态类型检查工具都原生支持Protocol校验
  • 支持多场景约束:除了实例方法,还可以校验类方法、静态方法、实例属性、类属性等任意类/对象特征
  • 兼容继承场景:如果有运行时校验、显式标记实现关系的需求,也可以让业务类显式继承协议类,此时和普通抽象基类的校验逻辑一致,不会产生冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:45:17