Keine Ausgabe im Terminal

Code-Stücke können hier veröffentlicht werden.
Antworten
marcel0301
User
Beiträge: 2
Registriert: Montag 11. Januar 2021, 12:06

Hallo,

ich bekomme bei meinem Code überhaupt keine Ausgabe, obwohl ich doch auf die Funktion get_hubraum zugreife. Eigentlich soll der Hubraum am Ende ausgegeben werden, bzw. bei einem negativen Wert der String.
Was hab ich falsch gemacht?

MfG Marcel Schmidt

Code: Alles auswählen

class Motorrad():
    def __init__(self, marke, hubraum):
        self.marke = marke
        self.__hubraum = hubraum

    def set_hubraum(self, kubik):
        if (kubik <= 0):
            print("Error: Negativer Wert für den Hubraum! \
                    Der Wert wurde nicht geändert")
        else:
            self.__hubraum = kubik
            print("Hubraum wurde geändert.")
    
    def get_hubraum(self):
        return self.__hubraum

motorrad1 = Motorrad("Suzuki", -333)
motorrad1.get_hubraum()
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Unmittelbar kein print zu verwenden.

Mittelbar schreibt man weder triviale getter in Python. Noch macht __ was du denkst was es tut, und du solltest es nicht verwenden.
Benutzeravatar
snafu
User
Beiträge: 6732
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@marcel0301
Rückgaben werden nur in der Python-Shell angezeigt. Im tatsächlichen Programm musst du print() benutzen.
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

In __init__ mußt Du natürlich auch den Setter benutzen und nicht direkt das Attribut setzen.
Dazu benutzt man Properties.

Code: Alles auswählen

class Motorrad:
    def __init__(self, marke, hubraum):
        self.marke = marke
        self.hubraum = hubraum

    @property
    def hubraum(self):
        return self._hubraum

    @hubraum.setter
    def hubraum(self, kubik):
        if kubik <= 0:
            print("Error: Negativer Wert für den Hubraum! "
                  "Der Wert wurde nicht geändert")
        else:
            self._hubraum = kubik
            print("Hubraum wurde geändert.")
    

motorrad1 = Motorrad("Suzuki", -333)
print(motorrad1.hubraum)
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

In __init__ mußt Du natürlich auch den Setter benutzen und nicht direkt das Attribut setzen.
Dazu benutzt man Properties.

Code: Alles auswählen

class Motorrad:
    def __init__(self, marke, hubraum):
        self.marke = marke
        self.hubraum = hubraum

    @property
    def hubraum(self):
        return self._hubraum

    @hubraum.setter
    def hubraum(self, kubik):
        if kubik <= 0:
            print("Error: Negativer Wert für den Hubraum! "
                  "Der Wert wurde nicht geändert")
        else:
            self._hubraum = kubik
            print("Hubraum wurde geändert.")
    

motorrad1 = Motorrad("Suzuki", -333)
print(motorrad1.hubraum)
Benutzeravatar
__blackjack__
User
Beiträge: 13006
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Sirius3: Wobei hier `_hubraum` unter umständen nicht existiert wenn man ein Motorrad schon mit negativem Hubraum erstellt:

Code: Alles auswählen

In [479]: m = Motorrad("Kreidler", -42)                                         
Error: Negativer Wert für den Hubraum! Der Wert wurde nicht geändert

In [480]: m.hubraum                                                             
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-480-d5624b00f01a> in <module>
----> 1 m.hubraum
      2 
      3 
      4 

<ipython-input-478-bee3adf15e46> in hubraum(self)
      6     @property
      7     def hubraum(self):
----> 8         return self._hubraum
      9 
     10     @hubraum.setter

AttributeError: 'Motorrad' object has no attribute '_hubraum'
@marcel0301: Fehler einfach nur auszugeben und danach so weiter zu machen als wäre gar kein Fehler aufgetreten ist kein sinnvoller Umgang mit Fehlern. Denn der Code der den negativen Hubraum gesetzt hat, geht ja davon aus, dass das funktioniert hat und macht einfach weiter als wäre das okay. An der Stelle müsste man eine Ausnahme auslösen.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten