Variablen in Klassen

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
Wololum
User
Beiträge: 6
Registriert: Montag 6. Juli 2020, 18:15

Code: Alles auswählen

class Juice:
    ming = 10

    def __init__(self, a,):
        if a < 10:                                              
            raise Exception(f"{a} ist zu low")
        else:
            self.a = a

    def geta(self):
        return self.a

    def seta(self, value):
        if value > 10:
            self.a = value
        else:
            raise Exception(f"{value} ist zu low")
Hallo,
ich bin ein Anfänger und beim Herumspielen mit Klassen auf folgendes Problem gestoßen.
Ich würde gerne die "10" im Konstruktor und in seta durch die Variable ming ersetzen .
Wenn ich das mache bekomme ich allerdings ein Fehler
NameError: name 'ming' is not defined
Bitte um Hilfe
harryberlin
User
Beiträge: 227
Registriert: Donnerstag 17. Dezember 2015, 12:17

1. ming nutzt du in deiner klasse gar nicht.
2. du nutzt im init ebenfalls seta.
3. du fragst einmal < 10, dann > 10. d.h. in einem fall frisst das programm die 10.
empty Sig
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

Man bau kein getter und setter. Für so etwas gibt es in Python properties. Da kannst dann auch deine Bereichsprüfung machen.

Und in dem Beispiel kommt kein Zugriff auf ming vor. Bitte zeig Code, der das wirklich reproduziert.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

`ming` ist auf der Klasse definiert, und sollt eigentlich `MING` heißen, weil Konstanten komplett gross geschrieben werden. Klasse-Attribute werden wie Instanzattribute über self angesprochen:

Code: Alles auswählen

class Juice:
    MING = 10

    def __init__(self, a):
        self.a = a

    @property
    def a(self):
        return self._a

    @property.setter
    def a(self, value)
        if value < self.MING:
            raise Exception(f"{value} is too low")
        self._a = value
Wololum
User
Beiträge: 6
Registriert: Montag 6. Juli 2020, 18:15

self.ming hat das Problem gelöst.
Vielen dank auch für die anderen Ratschläge, ich werde sie umsetzen

Gruß
Antworten