Variablen übergeben in einer Klasse

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Kahnbein.Kai
User
Beiträge: 104
Registriert: Mittwoch 24. Juni 2015, 14:12
Wohnort: Bochum

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
Benutzeravatar
pillmuncher
User
Beiträge: 1482
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Klar geht das einfacher, nämlich indem du einfache Funktionen verwendest, statt nutzloser Klassen.
In specifications, Murphy's Law supersedes Ohm's.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

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?
Kahnbein.Kai
User
Beiträge: 104
Registriert: Mittwoch 24. Juni 2015, 14:12
Wohnort: Bochum

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
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Was geht nicht? Wie lautet die genaue Fehlermeldung? Daran solltest Du erkennen, was Du falsch machst.
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@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
Kahnbein.Kai
User
Beiträge: 104
Registriert: Mittwoch 24. Juni 2015, 14:12
Wohnort: Bochum

@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
Antworten