为何TypedDict替代语法支持非法名称?能否让类式语法生效?
在Python 3.8.9中用类式语法定义含非法标识符的TypedDict
在Python 3.8.9环境下,采用字典参数式的TypedDict语法,能够正常定义包含detail.id这类不符合Python标识符规则的字段:
from typing import TypedDict, Optional # 可正常运行 Overview = TypedDict('Overview', {'detail.id': Optional[str]})
但改用类继承式语法时,会直接抛出SyntaxError错误:
# 报错信息:SyntaxError: illegal target for annotation class Overview(TypedDict): 'detail.id': Optional[str]
请问有没有办法让类式语法也能生效?
解决方案
在Python 3.8.9版本中,类式TypedDict语法本身不支持直接定义带.的非标准字段名——因为类体中的变量名必须符合Python标识符规则(不能包含.),即便用字符串字面量标注也会触发语法错误。
如果一定要使用类式写法,有两种可行的变通方案:
手动修改
__annotations__字典
先定义一个空的TypedDict类,再直接修改类的__annotations__属性,将非标准字段名添加进去:from typing import TypedDict, Optional class Overview(TypedDict): pass Overview.__annotations__['detail.id'] = Optional[str]这种方式既保留了类式的定义形式,又能添加非法标识符字段,类型检查工具(如mypy)也能正常识别该字段的类型。
升级Python版本并配合扩展工具(可选)
即便升级到Python 3.10及以上版本,类式TypedDict语法依然对字段名有标识符规则限制,因此__annotations__的修改方式依然适用。如果希望更优雅地处理这类场景,可以安装typing_extensions库,借助其扩展的TypedDict功能,但核心逻辑依然围绕修改注解字典展开。
内容的提问来源于stack exchange,提问作者sam
相关产品推荐
相关产品推荐

