Что представляет собой Pythoni c способ динамического создания элегантных классов данных (или вообще не классов данных)? - PullRequest
0 голосов
/ 02 апреля 2020

Я строю библиотеку для чтения из ввода и собираю библиотеки довольно высокого уровня для сериализации / десериализации. Входные данные будут хорошо структурированы, но могут изменяться и / или настраиваться, поэтому предварительная сборка всех типов классов невозможна. Ниже приведен пример кода:

import dataclasses
from dataclasses import make_dataclass

# I'm including the yaml_string below as an example of the input.
yaml_string = """
data_store: 'foo'
storage_connection_type: 'bar'
connection:
    endpoint: 'qaz'
    access_key_id: 'qoo'
"""

top_node = make_dataclass('Top node', ['data_store', 'storage_connection_type', 'connection'])
nested_node = make_dataclass('Nested node', ['endpoint', 'access_key_id'])

n = nested_node('qaz', 'qoo')
t = top_node('foo', 'bar', n)

print(t.data_store) #=> foo
print(t.connection.endpoint) #=> qaz

Последние шаги - это то, что я хочу выполнить - использование точечной нотации, позволяющей высокоуровневому пользователю читать / писать в классы, чрезвычайно мощно.

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

Я переборщил с классами данных? Есть ли способ лучше? Я посмотрел на __slots__ и namedtuples, и у обоих, похоже, есть похожие проблемы.

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