Извините, если это АБСОЛЮТНО софомальный вопрос, но мне любопытно, какие есть лучшие практики, и я не могу найти хорошего ответа в Google.
В Python я обычно использую пустой класс в качестве контейнера структуры данных super-catchall (вроде как файл JSON) и добавляю атрибуты по пути:
class DataObj:
"Catch-all data object"
def __init__(self):
pass
def processData(inputs):
data = DataObj()
data.a = 1
data.b = "sym"
data.c = [2,5,2,1]
Это дает мне огромную гибкость, потому что контейнерный объект может по существу хранить что угодно. Поэтому, если возникнут новые требования, я просто добавлю его в качестве другого атрибута в объект DataObj (который я передаю в своем коде).
Однако недавно я (программисты на FP) убедился, что это ужасная практика, потому что очень трудно читать код. Нужно пройти весь код, чтобы выяснить, какие атрибуты на самом деле имеет DataObj.
Вопрос : Как я могу переписать это для большей ремонтопригодности, не жертвуя гибкостью?
Есть ли какие-нибудь идеи из функционального программирования, которые я могу перенять?
Я ищу лучшие практики там.
Примечание . Одна из идей состоит в том, чтобы предварительно инициализировать класс всеми атрибутами, с которыми он может столкнуться, например
class DataObj:
"Catch-all data object"
def __init__(self):
data.a = 0
data.b = ""
data.c = []
def processData(inputs):
data = DataObj()
data.a = 1
data.b = "sym"
data.c = [2,5,2,1]
Это на самом деле хорошая идея? Что если я не знаю, какие у меня атрибуты априори?