Diese Frage ist sprachunabhängig, aber nicht vollständig, da sich die objektorientierte Programmierung (Object Oriented Programming, OOP) beispielsweise in Java , das keine erstklassigen Funktionen hat, von der in Python unterscheidet .
Mit anderen Worten, ich fühle mich weniger schuldig, unnötige Klassen in einer Sprache wie Java zu erstellen, aber ich habe das Gefühl, dass es einen besseren Weg geben könnte, wenn Sprachen wie Python weniger gut geschrieben sind.
Mein Programm muss mehrmals eine relativ komplexe Operation ausführen. Dieser Vorgang erfordert viel "Buchhaltung", muss einige temporäre Dateien erstellen und löschen, usw.
Aus diesem Grund müssen auch viele andere "Unteroperationen" aufgerufen werden - alles in einer großen Methode zusammenzufassen ist nicht sehr schön, modular, lesbar usw.
Das sind Ansätze, die mir in den Sinn kommen:
1. Erstellen Sie eine Klasse, die nur über eine öffentliche Methode verfügt und den für die Unteroperationen erforderlichen internen Status in ihren Instanzvariablen beibehält.
Es würde ungefähr so aussehen:
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.
Das Problem, das ich bei diesem Ansatz sehe, ist, dass der Status dieser Klasse nur intern Sinn macht und mit ihren Instanzen nichts tun kann, außer ihre einzige öffentliche Methode aufzurufen.
# 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. Erstellen Sie eine Reihe von Funktionen ohne Klasse und übergeben Sie die verschiedenen intern benötigten Variablen (als Argumente) zwischen ihnen.
Das Problem, das ich dabei sehe, ist, dass ich viele Variablen zwischen Funktionen übergeben muss. Außerdem wären die Funktionen eng miteinander verwandt, würden jedoch nicht zu Gruppen zusammengefasst.
3. Wie 2., aber machen Sie die Statusvariablen global, anstatt sie zu übergeben.
Dies wäre überhaupt nicht gut, da ich die Operation mehr als einmal mit unterschiedlichen Eingaben durchführen muss.
Gibt es einen vierten, besseren Ansatz? Wenn nicht, welcher dieser Ansätze wäre besser und warum? Fehlt mir etwas?