TypeError in Zusammenhang mit Decorator Pattern
Verfasst: Mittwoch 28. Dezember 2022, 15:09
hallo zusammen
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
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()