如何为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
相关产品推荐
相关产品推荐

