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

如何为Python中指定基类的所有子类类型对象添加注解?

问题场景与解决方案

定义基类与子类

首先定义基类FooBase及其子类:

class FooBase:
    pass

class Bar(FooBase): pass
class Baz(FooBase): pass
class Quux(FooBase): pass

存储子类实例的字典需求

我们需要用字典存储部分子类的唯一实例,代码如下:

ds = {}
ds[Bar] = Bar()
ds[Quux] = Quux()

类型注解的优化问题

当前字典的类型注解用Any作为键的类型,无法精确表达键的范围:

ds: dict[Any, FooBase] = {}

需要替换Any,明确表示键是FooBase任意子类的type对象。

解决方案

使用type[FooBase]替换Any,最终类型注解如下:

# Python 3.8及以下需从typing导入Type,3.9+可直接使用type[T]
from typing import Type

ds: dict[type[FooBase], FooBase] = {}

说明

  • type[T](低版本用Type[T])表示T类本身或其子类的类对象类型,完全匹配需求:键可以是Bar、Quux这类FooBase子类的类对象,也支持FooBase本身的类对象。
  • 这种注解能让静态类型检查工具(如mypy)正确识别字典键的合法范围,同时保证值都是FooBase的实例,提升代码的类型安全性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 15:46:58