Ich habe mehrere via Decorator Pattern verküpfte Klassen und ein TypeError-Problem. Die Strings werden in Zeile 24 und 42 wie gewünscht konkateniert, aber ich erhalte dennoch die Fehlermeldung "TypeError: sequence item 0: expected str instance, method found". Aber ich habe doch hier gar keine Methode? Ich vermute, dass mein Problem etwas mit Sichtbarkeit zu tun hat; mein String ist in __init__ von Belag sichtbar, aber nicht ausserhalb. Aber so richtig Sinn macht das auch nicht; der Job vom __init__ ist es doch gerade, von ausserhalb der Klasse nutzbare Objekte zu erstellen.
Also; ich blick' nicht mehr durch.
Bitte helft mir!
Ich danke im Voraus für alle Hinweise.
Liebe Grüsse aus Bern
Markus
Code: Alles auswählen
# Basisklasse für Pizza
class Pizza:
def __init__(self):
self.beschreibung = "Pizza"
def beschreibung(self):
return self.beschreibung
def wähle_Komponente(self, komponente):
for i, element in enumerate(komponente):
print(f"{i + 1}. {element}")
nummer = int(input("Bitte wähle eine Nummer aus der Liste aus: ")) - 1
return str(komponente[nummer])
# Klasse für den "Decorator" Belag
class Belag(Pizza):
verfügbareBeläge=["Peperoni","Käse","Schinken"]
def __init__(self, pizza):
print ("__init_ Belag")
self.pizza = pizza
print(self.pizza.beschreibung)
self.pizza.beschreibung = self.pizza.wähle_Komponente(Belag.verfügbareBeläge),"-",self.pizza.beschreibung
self.pizza.beschreibung = "".join(self.pizza.beschreibung)
print (self.pizza.beschreibung)
print("Komponente fertig\n")
def beschreibung(self):
return self.pizza.beschreibung
# Klasse für den "Decorator" Teig
class Teig(Pizza):
verfügbareTeige=["Vollkorn","Dinkel","glutenfrei"]
def __init__(self, pizza):
print ("__init_ Teig")
self.pizza = pizza
print(self.pizza.beschreibung)
self.pizza.beschreibung = self.pizza.beschreibung," mit ",(self.pizza.wähle_Komponente(Teig.verfügbareTeige))+"-Teig"
self.pizza.beschreibung = "".join(self.pizza.beschreibung)
print (pizza.beschreibung)
print("Komponente fertig\n")
def beschreibung(self):
return self.pizza.beschreibung
# In dieser Klasse wird die Bestellung beschrieben
class Bestellung:
def __init__(self):
self.bestellung = []
def komponiere_pizza(self):
# Erstelle eine "leere" Pizza
print("\nErstelle eine leere Pizza")
pizza = Pizza()
print(pizza.beschreibung)
# Belegen der Pizza
print("\nBelegen der Pizza")
pizza = Belag(pizza)
print(pizza.beschreibung)
# Auswahl des Teigs
print("\nAuswahl des Teigs")
pizza = Teig(pizza)
print(pizza.beschreibung)
# Füge die aktuelle Pizza der Bestellung hinzu
self.bestellung.append(pizza)
# weitere Pizzen bestellen
def zeigeBestellung (self):
print ("Du hast folgende Produkte bestellt:\n")
for produkt in self.bestellung:
print (produkt.beschreibung)
###TEST###
testBestellung = Bestellung()
testBestellung.komponiere_pizza()
testBestellung.zeigeBestellung()