python - TypedDict 无法声明名为“not”的属性
问题描述
我正在尝试为JSON Schema 规范jsonschema
声明一个类型,以便我可以通过使用Python 包传递模式来验证类型。它是一个字典,所以我使用的是 Python 3.8 TypedDict
。这是我到目前为止所拥有的:
from typing import List, Dict, Any, TypedDict, Optional
class JSONSchema(TypedDict):
"""A type for the JSONSchema spec"""
type: str
title: Optional[str]
description: Optional[str]
properties: Optional[Dict[str, JSONSchema]]
required: Optional[List[str]]
additionalProperties: Optional[bool]
definitions: Optional[Dict[str, JSONSchema]]
minLength: Optional[int]
maxLength: Optional[int]
allOf: Optional[List[JSONSchema]]
anyOf: Optional[List[JSONSchema]]
oneOf: Optional[List[JSONSchema]]
not: Optional[JSONSchema]
但是,我收到以下语法错误:
File "autocoder_ocr/schemas.py", line 39
not: Optional[JSONSchema]
^
SyntaxError: invalid syntax
这是因为not
是语言关键字。但是,"not"
是一个有效的 dict 键。那么如何在类型定义中声明呢?
我正在使用 Python 3.8.2
解决方案
嘿,你可以使用这种风格,它会让你不作为钥匙使用。
from typing import List, Dict, Any, TypedDict, Optional
JSONSchema = TypedDict(
"JSONSchema",
{
"type": str,
"title": Optional[str],
"description": Optional[str],
"properties": Optional[Dict[str, JSONSchema]],
"required": Optional[List[str]],
"additionalProperties": Optional[bool],
"definitions": Optional[Dict[str, JSONSchema]],
"minLength": Optional[int],
"maxLength": Optional[int],
"allOf": Optional[List[JSONSchema]],
"anyOf": Optional[List[JSONSchema]],
"oneOf": Optional[List[JSONSchema]],
"not": Optional[JSONSchema],
},
)
代码中的第二个错误是 JSONSchema 没有在类主体中定义,也没有在赋值的右侧定义。最终你可能会写出类似的东西Optional["JSONSchema"]
,但这并没有实现。
当前不支持递归或循环类型定义。这是 github 问题:https://github.com/python/mypy/issues/731,您可能可以在其中的某个地方找到工作。
推荐阅读
- c# - 使用 C# 启用 RabbitMQ 管理插件
- excel - “未定义用户定义的类型”,没有在 VBE 中突出显示代码
- c++ - c++ STL排序的比较器功能如何工作?
- excel - 从 A:F 复制表示“这不是日期格式”的行值并将值粘贴到特定列中
- python - 和有什么区别
和 ? - javascript - JS - 通过键访问对象值但出现消息 [TypeError: Cannot read property 'XXX' of undefined]
- qt - 从 Qt 应用程序中的 BLE 体重秤自动连接和读取数据
- sql - 显示 SQL 组中的最大到最小计数
- python - 给定字符串列表,在特定列中搜索匹配字符串并返回索引值
- java - 如何在不破坏其功能的情况下将此邮件方法分为两部分