Wieso zuerst an einen Namen binden, der nur im Funktionskörper vorhanden ist und diesen dann zurückgeben anstatt direkt return self.nenner?
Code: Alles auswählen
def get_Nenner(self):
Nenner = self.Nenner
return Nenner
def get_Zaehler(self):
Zaehler = self.Zaehler
return Zaehler
Warum das statt diesem:
Code: Alles auswählen
def get_Nenner(self):
return self.Nenner
def get_Zaehler(self):
return self.Zaehler
Aber getter und setter brauchst du nicht. Du kannst jederzeit mit instanz.instanzvariable drauf zugreifen. Du brauchst sie erst wenn du Daten vor dem binden überprüfen musst und selbst da gibt es bei Python wohl elegantere Lösungen.
Wieso bindet multiplikation die beiden sachen an Namen, die überhaupt gar keine Instanzvariablen sind?
Spreche von dieser Funktion
Code: Alles auswählen
def Multiplikation (self, neuer_Bruch):
neuer_zaehler = self.Zaehler * neuer_Bruch.get_Zaehler()
neuer_Nenner = self.Nenner * neuer_Bruch.get_Nenner()
Was sollen neuer_zaehler und neuer_nenner darstellen? Und was passiert mit ihnen? Sie werden erstellt, schön und gut! Aber dann?... Sie sind, nachdem der Funktionkörper beendet wurde, weg, weil sie nur in diesem "Pool" waren. Du musst sie schon an die Instanz mit self. binden. Also...
Code: Alles auswählen
def Multiplikation (self, neuer_Bruch):
self.Zaehler = self.Zaehler * neuer_Bruch.get_Zaehler()
self.Nenner = self.Nenner * neuer_Bruch.get_Nenner()
wäre sinnvoller. Aber die Frage ist halt... das ganze Konzept ist nicht so toll.
Du musst dir das Objekt "Bruch" mal vorstellen. Was besitzt es, was kann es? Was _braucht_ es? Es braucht einen Zähler und einen Nenner, mehr besitzt er ja nicht. Er hat eine Darstellung mit zähler/nenner, man kann mit ihnen die Rechenoperationen durchführen. 2 Brüche miteinander und auch normale Zahlen und Brüche.
Also das Konzept sagt uns es gibt Bruch mit den Instanzvariablen nenner und zähler. Diese beiden werden immer benötigt, haben also auch Standardwerte. So haben wir doch schonmal den Kopf des Objektes
Code: Alles auswählen
class Bruch(object):
def __init__(self, zaehler=0, nenner=0):
self.zaehler = zaehler
self.nenner = nenner
So bau ich mir meine Objekte zumindest auf... Was hab ich, was will ich, was soll passieren. Und halt dich am besten an den Styleguide... er führt zu gleichbleibenden Code.
funktionsnamen_klein_und_unterstriche
KlassenGrossUndZusammen
variablen_auch_klein_und_unterstriche
Stets um ein = Leerzeichen, außer bei Standardwerten von Funktionen. Mach deine Zeilen nich zu lang, kannst ja jederzeit umbrechen.
Is so das wichtigste erstmal.