21. 3 Setter und Getter und Property Attributes Manchmal ist es wünschenswert, den Zugriff auf die Attribute einer Klasse nach bestimmten Regeln zu beeinflussen. So gibt es Attribute, für die nur bestimmte Werte Sinn ergeben. In unserer Klasse Konto (siehe Abschnitt 21. 1. 2) gibt es zum Beispiel das Attribut Tagesumsatz, dessen Werte sinnvollerweise immer positiv sein sollten. 21. 3. 1 Setter und Getter Ein Konzept der objektorientierten Programmierung, um den Zugriff auf Attribute zu steuern, stellen die Setter-Methoden und Getter-Methoden dar. Anstatt direkt auf das Attribut zuzugreifen, wird der Zugriff dabei über spezielle Methoden geregelt. Um das folgende Beispiel übersichtlich zu halten, werden wir eine neue Klasse A einführen, die ein über Setter- und Getter-Methoden verwaltetes Attribut besitzt. Die Übertragung auf das Kontobeispiel ist dann eine einfache Übungsaufgabe. class A: def __init__ ( self): self. _X = 100 def getX ( self): return self. _X def setX ( self, wert): if wert < 0: return self.
Lesezeit: 6 Minuten Dekan J Was ist der Vorteil der Verwendung von Gettern und Settern, die nur Get und Set verwenden, anstatt einfach öffentliche Felder für diese Variablen zu verwenden? Wenn Getter und Setter jemals mehr als nur das einfache Get / Set tun, kann ich das sehr schnell herausfinden, aber ich bin mir nicht 100% klar darüber, wie: public String foo; ist schlimmer als: private String foo; public void setFoo(String foo) { = foo;} public String getFoo() { return foo;} Während ersteres viel weniger Boilerplate-Code benötigt. Denn 2 Wochen (Monate, Jahre) ab jetzt, wenn Sie erkennen, dass Ihr Setter tun muss mehr Sie werden nicht nur den Wert setzen, sondern auch feststellen, dass die Eigenschaft direkt in 238 anderen Klassen verwendet wurde 🙂 Viele Leute sprechen über die Vorteile von Gettern und Settern, aber ich möchte den Advokaten des Teufels spielen. Im Moment debugge ich ein sehr großes Programm, bei dem die Programmierer beschlossen haben, alles Getter und Setter zu machen.
Du kannst eine Logik einbauen, welche die Nutzereingabe überprüft. if (neueMoebelGroesse>0){ moebelGroesse =neueMoebelGroesse; System. out. println( "Ein neues Möbelstück wurde aufgenommen. Die Größe beträgt:" + moebelGroesse);} else { System. println( "Eingabe muss größer Null sein. "); (1);}}} Was passiert im Methodenrumpf? Die Methode prüft den Wert des Parameters. Wenn dieser größer als Null ist, erfolgt die Zuweisung. Zur Überprüfung wird eine Konsolenausgabe ausgegeben. Ist dieser kleiner oder gleich Null. Erfolgt eine Fehlermeldung (Wert muss größer Null sein). Das Programm bricht außerdem ab. Lass es uns ausprobieren. Erzeuge ein Möbelstück in der Lagerwaltung und weise diesem über den Setter eine Größe zu. So sieht der Code aus. stuhl. setMoebelGroesse (200); //Zuweisung erfolgt über die setter Methode}} Funktioniert? Gib doch einmal den Parameter -200 ein. Und …. Jetzt erfolgt die Fehlermeldung auf der Konsole. Passt, oder? Warum void als Rückgabewert der setter-Methode? Void besagt, dass diese Methode keinen Rückgabewert zurückgibt.