@Turing-Kepler,
ich fürchte, dass diese Modellierung auf Dauer nicht gut funktionieren wird.
Eine Klasse Produkt sollte nicht mehrere Instanzen von Produkten verwalten. Die Klasse, wie schon erwähnt, ist nur ein Bauplan für alle zu erstellenden Produkte. Sie soll nicht alle Daten aller Produkte verwalten. Das wird zu groß und unübersichtlich.
Die Klasse Zahlung ist eigentlich überflüssig. Sie enthält Methoden, die der Shop haben sollte.
Vielleicht so:
Code: Alles auswählen
class Produkt:
def __init__(self, name, preis, stueckzahl):
self.name = name
self.preis = preis
self.stueckzahl = stueckzahl
class Onlineshop:
def __init__(self) -> None:
# zur Vereinfachung ein Dictionary, eigentlich sollte eine Datenbank die Produkte verwalten
self.produkte = {
"Hose": Produkt("Hose", 0.99, 20),
"Hemd": Produkt("Hemd", 127.12, 0),
"Schuh": Produkt("Schuh", 12.13, 1001),
}
def transaction(self, produkt_name, bezahlt):
produkt = self.produkte.get(produkt_name)
if produkt == None or produkt.stueckzahl <= 0:
print(f"Produkt '{produkt_name}' nicht vorhanden")
return
if bezahlt >= produkt.preis:
print(f"Es wurde ein Produkt '{produkt.name}' verkauft. Rückgeld: {bezahlt-produkt.preis:0.2f} €")
self.produkte[produkt_name].stueckzahl -= 1
else:
print(f"Nicht genügend bezaht um das Produkt '{produkt.name}' zu kaufen, Transaktion abgebrochen")
online_shop = Onlineshop()
online_shop.transaction("Hose", 1)
online_shop.transaction("Hemd", 200)
online_shop.transaction("Schuh", 10)
online_shop.transaction("Jacke", 10000)
"""
Ausgabe:
Es wurde ein Produkt 'Hose' verkauft. Rückgeld: 0.01 €
Produkt 'Hemd' nicht vorhanden
Nicht genügend bezaht um das Produkt 'Schuh' zu kaufen, Transaktion abgebrochen
Produkt 'Jacke' nicht vorhanden
"""