Seite 1 von 1

Variablen übergeben in einer Klasse

Verfasst: Montag 21. Juni 2021, 14:03
von Kahnbein.Kai
Guten Tag,
ich möchte verschiedene Berechnungen mit verschiedenen Methoden durchführen, die Ausgabe soll dann eine Methode übernehmen.
Ich weiß nicht wie ich das Ergebnis der Berechnung an die Ausgabemethode übergeben soll.
Mein Script sieht wie folgt aus, hierbei gibt jede Methode das Ergebnis selber aus.

Code: Alles auswählen

class Rechnen:

    def __init__(self, x, y):
        self.x = x
        self.y = y
        
    def add(self):
        z = self.x + self.y
        print(f"{self.x} + {self.y} =  {z}")
        
    def sub(self):
        z = self.x-self.y
        print(f"{self.x} + {self.y} =  {z}") 
        
Objekt1 = Rechnen(2,3).add()
Geschafft habe ich es so:

Code: Alles auswählen

class Rechnen:

    def __init__(self, x, y):
        self.x = x
        self.y = y
        
    def add(self):
        z = self.x + self.y
        return z
        
    def sub(self):
        z = self.x-self.y
        return z
        
class Ausgabe:
    def __init__(self, Erg):
       self.Erg = Erg
        
    def AusgabeBildschirm(self):
        print(f"Das Ergebnis ist {self.Erg}")
   
Objekt1 = Rechnen(2,3).add()

Objekt2 = Ausgabe(Objekt1).AusgabeBildschirm()

Objekt3 = Ausgabe(Rechnen(10,5).add()).AusgabeBildschirm()
Die erste Lösung mit Objekt2 ist total kompliziert, geht das nicht einfacher ?

Gruß Kai

Re: Variablen übergeben in einer Klasse

Verfasst: Montag 21. Juni 2021, 14:09
von pillmuncher
Klar geht das einfacher, nämlich indem du einfache Funktionen verwendest, statt nutzloser Klassen.

Re: Variablen übergeben in einer Klasse

Verfasst: Montag 21. Juni 2021, 14:29
von Sirius3
Ich hätte das jetzt so geschrieben:

Code: Alles auswählen

print(f"Das Ergebnis ist {2+3}")
Warum willst Du hier Klassen verwenden? Wie sieht Dein wirkliches Problem aus?

Re: Variablen übergeben in einer Klasse

Verfasst: Dienstag 22. Juni 2021, 07:25
von Kahnbein.Kai
Guten Morgen,
es muss nicht über eine andere Klasse sein, es geht auch innerhalb der Rechnenklasse.
Also quasi so:

Code: Alles auswählen

class Rechnen:

    def __init__(self, x, y):
        self.x = x
        self.y = y
        
    def add(self):
        z = self.x + self.y
        return z
        
    def sub(self):
        z = self.x-self.y
       return z

    def Asugabe(self):
      print(f"Das Ergebnis ist ...")

        
Objekt1 = Rechnen(2,3).add()
Ich dachte es klappt so, aber es geht leider nicht:

Code: Alles auswählen

class Rechnen:

    def __init__(self, x, y):
        self.x = x
        self.y = y
        
    def add(self):
        z = self.x + self.y
        z.Ausgabe(z)
        
    def sub(self):
        z = self.x-self.y
        z.Ausgabe(z)

    def Ausgabe(self,Erg):
      print(f"Das Ergebnis ist {Erg}")

        
Objekt1 = Rechnen(2,3).add()
Das ist mein echtes Problem, ich weiß nicht wie ich das Ergebnis an die andere Methode übertrage bzw. die Methode ausführe.


Gruß Kai

Re: Variablen übergeben in einer Klasse

Verfasst: Dienstag 22. Juni 2021, 07:48
von Sirius3
Was geht nicht? Wie lautet die genaue Fehlermeldung? Daran solltest Du erkennen, was Du falsch machst.

Re: Variablen übergeben in einer Klasse

Verfasst: Dienstag 22. Juni 2021, 11:02
von rogerb
@Kahnbein.Kai,
Im ersten Code wird die Ausgabe Funktion nicht aufgerufen. Daher bekommst du auch keine Ausgabe.
Im zweiten Code bekommst du hier wahrscheinlich einen Fehler:

Code: Alles auswählen

z.Ausgabe(z)
Die Ausgabe-Funktion ist eine Instanzmethode. z ist ein int und hat keine Funktion Ausgabe.
Du must sie also so: self.Ausgabe(z) aufrufen.

Noch einige Tipps:
Man sollte sich von Anfang an angewöhnen englische Namen zu verwenden. Funktionsnamen und Variablen sollten per Konvention klein geschrieben werden.
Dass man dafür keine Klasse braucht wurde ja schon gesagt (Ich nehme an du willst das Arbeiten mit Klassen üben?)

Damit:

Code: Alles auswählen

class Rechnen:

    def __init__(self, x, y):
        self.x = x
        self.y = y
        
    def add(self):
        result = self.x + self.y
        self.output(result)
        
    def sub(self):
        result = self.x-self.y
        self.output(result)

    def output(self, result):
      print(f"Das Ergebnis ist {result}")


Rechnen(2,3).add()
Rechnen(2,3).sub()
Bekommt man diese Ausgabe:

Code: Alles auswählen

Das Ergebnis ist 5
Das Ergebnis ist -1

Re: Variablen übergeben in einer Klasse

Verfasst: Mittwoch 23. Juni 2021, 10:29
von Kahnbein.Kai
@rogerb,

vielen Dank, genau das war mein Fehler. Ja, ich wollte den umgang mit Klassen und Funktionen üben, wie man sieht brauche ich das auch...
Genau die Fehlermeldung habe ich auch bekommen.

Zuerst habe ich es auch mit

Code: Alles auswählen

.Ausgabe(z)
und

Code: Alles auswählen

Ausgabe(z)
versucht, ich bin einfach nicht auf

Code: Alles auswählen

self.Ausgabe(z)
gekommen.

Gruß Kai