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

如何为给类添加属性的装饰器编写静态类型提示?

给类装饰器添加类型提示的方案

要实现给类添加属性的装饰器的类型提示,让被装饰类能正确识别新增属性,可以通过协议(Protocol)+ 交集类型的方式实现,主流类型检查器(如mypy、pyright)均支持该方案。

具体实现代码

from typing import TypeVar, Type, Protocol

# 定义泛型类型变量,代表原始类
T = TypeVar('T')

# 定义协议,声明要添加的属性
class HasX(Protocol):
    x: int

def add_x(cls: Type[T]) -> Type[T & HasX]:
    cls.x = 5
    return cls

@add_x
class Example:
    pass

# 此时类型检查器会正确提示 Example.x 为 int 类型
print(Example.x)  # 输出 5

原理说明

  1. 用TypeVar[T]捕获被装饰类的原始类型,保证装饰器能兼容任意类。
  2. 定义HasX协议,明确装饰器要给类添加的x: int属性。
  3. 装饰器的返回类型设为Type[T & HasX],表示返回的类同时具备原始类T的所有成员和HasX协议中的属性,类型检查器据此能正确识别新增的x属性。

版本兼容提示

  • Python 3.10+ 直接支持&交集类型写法;
  • 若使用Python 3.9及以下版本,可替换为Type[Intersection[T, HasX]],需从typing导入Intersection。

内容的提问来源于stack exchange,提问作者Robin De Schepper

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:35:26