Klassen Definition soll Liste ausgeben

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
gomez72
User
Beiträge: 71
Registriert: Sonntag 28. März 2021, 09:57

Hallo zusammen,

ich bin in meinen Anfängen und komme an einer Stelle alleine nicht weiter. Durch diverse Suchanfragen konnte ich mein Problem leider nicht finden.
Es ist sicher eine triviale Lösung :(

Ich möchte einen Aussaht Kalender entwickeln. Meine spezifischen Gemuese Sorten, die ich dann pflanze und ernte sind Instanzen einer Gemüse Klasse.
Ich bin noch nicht so weit, um mit Python eine Datenbank anzusprechen, deswegen möchte ich meine Daten erstmal in einer Python Liste speichern. Das würde mir für´s erste reichen.

Jetzt zu meinem Problem:
In einer Datei classlist.py habe ich meine Gemuese Klasse definiert und speichere auch dort die Gemüse Eigenschaften innerhalb einer Liste.

Code: Alles auswählen

Knoblauch = ["Knoblauch", "lockerer Boden, humusreich", "Mischkultur"]
Ich erzeuge in der main.py eine Instanz der Klasse gemuese, wie zum Beispiel

Code: Alles auswählen

knoblauch = Gemuese("Knoblauch")
und übergebe dabei den String "Knoblauch"

Nun soll eine Klassen Funktion der Gemüse Klasse die Eigenschaften des Gemüses ausgeben.
Ich hole mir den string "Knoblauch" aus dem Aufruf aus der main.py und möchte diesen dann in der Funktion

Code: Alles auswählen

    def definition_ausgeben(self):
        print(self.gemuese_name)
dazu verwenden die vorher definierte Liste auszugeben.
Hier ist mein Problem: durch diesen Funktionsaufruf wird mir nur der String "Knoblauch" ausgegeben, aber nicht die gespeicherten Inhalte der "Knoblauch-Liste.
Ich möchte in der Funktion nicht explizit die Liste Knoblauch direkt angeben müssen (was wunderbar klappen würde, schon getestet), weil ich sonst den Code immer wieder spezifisch erweitern müsste, wenn ein Gemüse dazukommt. Ich schätze das wäre auch ein schlechter Programmierstil. :(


hier meine beiden vollständigen py Dateien
main. py

Code: Alles auswählen

from classlist import Gemuese

knoblauch = Gemuese("Knoblauch")
knoblauch.definition_ausgeben()
classlist.py

Code: Alles auswählen

Knoblauch = ["Knoblauch", "lockerer Boden, humusreich", "Mischkultur"]


class Gemuese:
    def __init__(self, gemuese_name):
        self.gemuese_name = gemuese_name
        print("Der " + gemuese_name + " wurde in die Satliste aufgenommen")
    def definition_ausgeben(self):
        print(self.gemuese_name)
    def aussaht(self):
        print("Der " + self.gemuese_name + " wird ausgesäht")
Ich würde mich sehr freuen, wenn mir jemand auf die Sprünge helfen kann.
GabrielleChanel
User
Beiträge: 42
Registriert: Dienstag 13. April 2021, 11:54

Hallo, ich habe mir kurz dein Code angeguckt.
An zwei Stellen steht bei dir "Knoblach". Beim Zugreifen, greifst du jeweils nicht wie gewünscht auf deine "Knoblauch-Liste" in classlist.py, sondern auf den String "Knoblauch" in main.py (du kannst beispielsweise "knoblauch" klein schreiben, dann siehst du dass du auf diesen String zugreifst). Deswegen erhälst du auch ein NameError, weil es sich um zwar mit "Knoblauch" um den gleichen wörtlichen Inhalt, aber um eine andere Variable, handelt. In main.py enthält der String nur "Knoblauch" also kannst du gar nicht auf mehr Information zugreifen, weil es an dieser Stelle nichts mehr gibt. Wenn du jedoch auf die Liste zugreifen kannst, dann kannst du dann in einem weiteren Schritt das erste Wort überspringen, also eine Ausgabe der Liste ohne das erste Argument generieren.

Und ein weiterer Punkt und Tipp zugleich: Ich würde in deiner "classlist.py" in "definition_ausgeben()" und "aussaht()" statt "print()" ein "return" verwenden und dafür in "main.py" "print(knoblauch.definition_ausgeben())" oder diese in eine Zwischenvariable (z.b. "my_gemuese_wahl = knoblauch.definition_ausgeben()") speichern und dann "print(my_gemuese_wahl)" anwenden.

PS. Ich fühle mich leider selber noch Programmieranfängerin, aber ich hoffe, dass ich dir dennoch irgendwie helfen konnte.
"Those who can imagine anything, can create the impossible." Alan Turing
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@GabrielleChanel: Das ist ein Doppelpost.
Antworten