Przykro mi, jeśli jest to całkowicie absurdalne pytanie, ale jestem ciekawy, jakie są najlepsze praktyki i nie mogę znaleźć dobrej odpowiedzi w Google.
W Pythonie zwykle używam pustej klasy jako super-catchallowego kontenera struktury danych (coś w rodzaju pliku JSON) i dodając atrybuty po drodze:
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]
Daje mi to ogromną elastyczność, ponieważ obiekt kontenerowy może zasadniczo przechowywać wszystko. Więc jeśli pojawią się nowe wymagania, po prostu dodam go jako kolejny atrybut do obiektu DataObj (który przekazuję w moim kodzie).
Jednak ostatnio (programistom FP) wywarło na mnie wrażenie, że jest to okropna praktyka, ponieważ bardzo utrudnia czytanie kodu. Należy przejść przez cały kod, aby dowiedzieć się, jakie atrybuty ma DataObj.
Pytanie : Jak mogę to przepisać, aby uzyskać większą łatwość konserwacji bez utraty elastyczności?
Czy są jakieś pomysły z programowania funkcjonalnego, które mogę zastosować?
Szukam najlepszych praktyk.
Uwaga : jednym z pomysłów jest wstępne zainicjowanie klasy za pomocą wszystkich atrybutów, które można napotkać, np
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]
Czy to naprawdę dobry pomysł? Co jeśli nie wiem, jakie są moje atrybuty a priori?