Python 3.11中类型映射实例列表的字典类型注解问题
解决方案
你遇到的错误根源是:类型变量T没有绑定到泛型类上,但你的字典需要存储任意类型到该类型对象列表的映射,而非单一类型的泛型容器。以下是两种可行的类型注解方案:
方案一:基础类型注解+泛型方法(推荐,兼顾类型安全与灵活性)
这种方式在字典的基础类型注解外,通过泛型方法保证操作时的类型检查:
from typing import TypeVar, Dict, List, cast T = TypeVar("T") class DictHolder: def __init__(self): # 字典的基础类型:键为任意类型,值为对象列表 self._things: Dict[type, List[object]] = {} def add_item(self, item: T) -> None: item_type = type(item) if item_type not in self._things: self._things[item_type] = [] self._things[item_type].append(item) def get_items(self, item_type: type[T]) -> List[T]: # 用cast明确类型转换,让类型检查器识别返回值的类型对应关系 return cast(List[T], self._things.get(item_type, []))
方案二:使用Any简化注解(适合快速开发,类型检查宽松)
如果不需要严格的类型检查,可以直接用Any简化注解:
from typing import Dict, List, Any class DictHolder: def __init__(self): self._things: Dict[type, List[Any]] = {} def add_item(self, item: Any) -> None: item_type = type(item) if item_type not in self._things: self._things[item_type] = [] self._things[item_type].append(item) def get_items(self, item_type: type) -> List[Any]: return self._things.get(item_type, [])
内容的提问来源于stack exchange,提问作者Charles Nicholson
相关产品推荐
相关产品推荐

