Вибачте, якщо це АБСОЛЮТНО-софістичне питання, але мені цікаво, які найкращі практики є там, і я не можу знайти хорошу відповідь у Google.
У Python я зазвичай використовую порожній клас як контейнер структури суперкачальних даних (на зразок файлу 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]
Це насправді гарна ідея? Що робити, якщо я не знаю, які мої атрибути є апріорі?