Я пытаюсь определить две версии типизированного словаря для клиента API: одну Total=False для ввода маршрута частичного обновления и другую Total=True для ответа. Любой словарь с подмножеством полей действителен в качестве входных данных, но выходные словари должны иметь все поля.
Я пробовал это:
Код: Выделить всё
class PartialDict(TypedDict, total=False):
name: str
age: int
class FullDict(PartialDict, total=True):
pass
Но это не работает, поскольку Mypy 1.13 не жалуется ни на что из этого:
Код: Выделить всё
x: PartialDict = {} # ok
y: FullDict = {} # should fail
Если я отменяю наследование и делаю PartialDict наследованием от FullDict, который определяет поля, Mypy будет жаловаться на обе строки:
Код: Выделить всё
mymodule/types.py:38: error: Missing keys ("name", "age") for TypedDict "PartialDict" [typeddict-item]
mymodule/types.py:39: error: Missing keys ("name", "age") for TypedDict "FullDict" [typeddict-item]
Как определить такие типы, как FullDict должен иметь все ключи, а PartialDict может иметь не все из них? Я хотел бы избежать дублирования классов, поскольку мой реальный словарь имеет десятки ключей.
Подробнее здесь:
https://stackoverflow.com/questions/791 ... nd-one-not