Questa domanda è in qualche modo indipendente dal linguaggio, ma non completamente, dal momento che la programmazione orientata agli oggetti (OOP) è diversa, ad esempio, in Java , che non ha funzioni di prima classe, rispetto a Python .
In altre parole, mi sento meno in colpa per la creazione di classi non necessarie in un linguaggio come Java, ma sento che potrebbe esserci un modo migliore nei linguaggi meno complessi come Python.
Il mio programma deve eseguire un'operazione relativamente complessa più volte. Tale operazione richiede molta "contabilità", deve creare ed eliminare alcuni file temporanei, ecc.
Ecco perché deve anche chiamare molte altre "operazioni secondarie": mettere tutto in un unico metodo enorme non è molto bello, modulare, leggibile, ecc.
Ora questi sono approcci che mi vengono in mente:
1. Creare una classe che abbia un solo metodo pubblico e mantenga lo stato interno necessario per le operazioni secondarie nelle sue variabili di istanza.
Sarebbe simile a questo:
class Thing:
def __init__(self, var1, var2):
self.var1 = var1
self.var2 = var2
self.var3 = []
def the_public_method(self, param1, param2):
self.var4 = param1
self.var5 = param2
self.var6 = param1 + param2 * self.var1
self.__suboperation1()
self.__suboperation2()
self.__suboperation3()
def __suboperation1(self):
# Do something with self.var1, self.var2, self.var6
# Do something with the result and self.var3
# self.var7 = something
# ...
self.__suboperation4()
self.__suboperation5()
# ...
def suboperation2(self):
# Uses self.var1 and self.var3
# ...
# etc.
Il problema che vedo con questo approccio è che lo stato di questa classe ha senso solo internamente e non può fare nulla con le sue istanze se non chiamare il loro unico metodo pubblico.
# Make a thing object
thing = Thing(1,2)
# Call the only method you can call
thing.the_public_method(3,4)
# You don't need thing anymore
2. Crea un gruppo di funzioni senza una classe e passa tra loro le varie variabili necessarie internamente (come argomenti).
Il problema che vedo in questo è che devo passare molte variabili tra le funzioni. Inoltre, le funzioni sarebbero strettamente correlate tra loro, ma non sarebbero raggruppate insieme.
3. Come 2. ma rendi globali le variabili di stato invece di passarle.
Questo non sarebbe affatto positivo, dal momento che devo eseguire l'operazione più di una volta, con input diversi.
Esiste un quarto approccio migliore? In caso contrario, quale di questi approcci sarebbe migliore e perché? C'è qualcosa che mi manca?