Seite 1 von 1
Variablen in Klassen
Verfasst: Montag 6. Juli 2020, 18:24
von Wololum
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
Re: Variablen in Klassen
Verfasst: Montag 6. Juli 2020, 19:28
von harryberlin
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.
Re: Variablen in Klassen
Verfasst: Montag 6. Juli 2020, 19:29
von __deets__
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.
Re: Variablen in Klassen
Verfasst: Montag 6. Juli 2020, 19:37
von Sirius3
`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
Re: Variablen in Klassen
Verfasst: Montag 6. Juli 2020, 20:17
von Wololum
self.ming hat das Problem gelöst.
Vielen dank auch für die anderen Ratschläge, ich werde sie umsetzen
Gruß