Есть ли способ определить тип вложенного словаря с использованием обозначения класса Python? - PullRequest
0 голосов
/ 29 мая 2020

Итак, я изучаю, как набирать большие JSON объекты, которые я получаю с устройств. Я нашел тип TypedDict в Python 3.8 и считаю, что это довольно круто.

Но затем я начал копаться в кроличьей норе вложенных словарей и не был уверен, есть ли лучший способ.

Вопрос: есть ли способ определить вложенные типизированные словари Dicts с использованием обозначения классов?

У меня есть следующий словарь

object = {
    'name': 'My Name',
    'somekey': {
        'subkey1': 1,
        'subkey2': {
            'subsubkey1': 2,
            'subsubkey2': 'nested'
        }
    }
}

Я импортирую следующую библиотеку from typing import TypedDict

Используя аннотацию присваивания, я смог придумать это, но это уродливо и трудно читать.

MyObjAssignmentNotation = TypedDict('Obj', {'name': str, 'somekey': TypedDict('SubObj_1', {'subkey1': int, 'subkey2': TypedDict(
    'SubObj_2', {'subsubkey1': int, 'subsubkey2': str})})}

Используя обозначение класса, я придумал это, но все типы разделены и непросто понять, каким должен быть комбинированный шрифт, так как читать нужно снизу вверх.

class SubObj_Layer2(TypedDict):
    subsubkey1: int
    subsubkey2: str


class SubObj_Layer1(TypedDict):
    subkey1: int
    subkey2: SubObj_Layer2


class MyObjClassNotation(TypedDict):
    name: str
    somekey: SubObj_Layer1

Затем я проявил немного творчества и сложил их вместе, и это немного лучше, но не намного .

class MyObjClassAndAssignmentNotation(TypedDict):
    name: str
    somekey: TypedDict('SubObj_1', {'subkey1': int, 'subkey2': TypedDict(
        'SubObj_2', {'subsubkey1': int, 'subsubkey2': str})})

Есть предложения по улучшению синтаксиса выше?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...