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

classlist ist ein äußerst schlechter Name für ein Modul. Die darin definierte Klasse hat gar nichts mit Listen von Klassen zu tun. Insgesamt ist es noch gar nicht nötig, das Programm in mehrere Module aufzuteilen.
Eine Liste ist für gleichartige Elemente da, ein Gemüsename, ein Bodentyp und eine Nachbarschaft sind aber drei total verschieden Sachen. Konstanten werden komplett GROSS geschrieben.
Strings stückelt man nicht mit + zusammen, sondern nutzt Stringformatierung.
Saat schreibt man mit zwei a.
Zum eigentlichen Problem: nutze ein Wörterbuch

Code: Alles auswählen

GEMUESE = {
    "Knoblauch": {
        "Boden": "lockerer Boden, humusreich",
        "Nachbarschaft": "Mischkultur"
    }
}


class Gemuese:
    def __init__(self, gemuese_name):
        self.gemuese_name = gemuese_name
        print(f"Der {gemuese_name} wurde in die Saatliste aufgenommen")

    def definition_ausgeben(self):
        print(GEMUESE[self.gemuese_name])

    def aussaat(self):
        print(f"Der {self.gemuese_name} wird ausgesät.")

knoblauch = Gemuese("Knoblauch")
knoblauch.definition_ausgeben()
gomez72
User
Beiträge: 72
Registriert: Sonntag 28. März 2021, 09:57

alles klar vielen Dank !
Antworten