ich bin noch am Lernen der OOP und jetzt hat sich wieder eine Frage ergeben, wobei ich nicht mehr sicher bin, wie sinnvoll das eigentlich ist was ich da gerade versuche. Zur leichteren Erklärung habe ich alles auf ein Minimalbeispiel heruntergebrochen:
Ich habe eine Klasse erstellt, in der Objekte erstellt werden, die nur eine veränderbare Position besitzen. Da ich die Position nicht nur von einem Objekt sondern von allen ändern will, habe ich die Objekte in eine Liste gepackt, die dann an die entsprechenden Funktionen übergeben werden. Nun ist mir aber aufgefallen, dass in den Funktionen immer die fast identische for-Schleife steht, so dass ich diese Auslagern wollte, aber genau dort komme ich nicht weiter.
Ich hatte versucht die Klassen-Funktion an eine Variable zu binden, um diese dann über Objekt.Variable() aufrufen zu können, aber bekomme das nicht hin...
Code: Alles auswählen
class Objekte(object):
def __init__(self, position):
self.position = position
def move_forward(self):
self.position += 1
def move_backward(self):
self.position -= 1
def get_position(self):
return self.position
# Gruppenbewegung
def move_all_forward(objekt_liste):
# for objekt in objekte_liste: <--- erste Version
# objekt.move_forward()
move_all('forward', objekt_liste)
def move_all_backward(objekt_liste):
# for objekt in objekte_liste: <--- erste Version
# objekt.move_backward()
move_all('backward', objekt_liste)
def move_all(direction, objekt_liste):
if direction == 'forward':
move_function = move_forward # <--- Fehler
elif direction == 'backward':
move_function = move_backward # <--- Fehler
for objekt in objekt_liste:
objekt.move_function() # <--- Aufruf
def main():
objekt_liste = []
objekt_1 = Objekte(8)
objekt_liste.append(objekt_1)
objekt_2 = Objekte(5)
objekt_liste.append(objekt_2)
print('objekt_1: {}'.format(objekt_1.get_position()))
print('objekt_2: {}'.format(objekt_2.get_position()))
print('---move all forward ---')
move_all_forward(objekt_liste)
print('objekt_1: {}'.format(objekt_1.get_position()))
print('objekt_2: {}'.format(objekt_2.get_position()))
if __name__ == '__main__':
main()
Schonmal danke