# 1. Decorator: Loggt die Ausführung der Fusion def log_merger(func): def wrapper(*args, **kwargs): print("[SYSTEM LOG]: Initiating merger...") # WICHTIG: Das Ergebnis der ursprünglichen Funktion muss zurückgegeben werden return func(*args, **kwargs) return wrapper class Abteilung: def __init__(self, name, budget, mitarbeiter): self.name = name self.budget = budget # mitarbeiter ist ein Dictionary: {"Name": "Rolle"} self.mitarbeiter = mitarbeiter # 2. Magic Method __add__: Definiert das Verhalten beim '+' Operator @log_merger def __add__(self, other): # Namen kombinieren und Budgets addieren neuer_name = f"{self.name} & {other.name}" neues_budget = self.budget + other.budget # Beide Dictionaries zusammenfügen (Unpacking) combined = {**self.mitarbeiter, **other.mitarbeiter} # Dictionary Comprehension mit if-Bedingung: # Fügt alle Mitarbeiter hinzu, außer diejenigen mit der Rolle "Intern" neue_mitarbeiter = {name: role for name, role in combined.items() if role != "Praktikant"} return Abteilung(neuer_name, neues_budget, neue_mitarbeiter) # 3. Magic Method __str__: Definiert die Textausgabe bei print(objekt) def __str__(self): return f"Abteilung: {self.name} | Budget: {self.budget}€ | mitarbeiter: {len(self.mitarbeiter)}" if __name__ == "__main__": # Zwei Abteilungen mit Dictionaries erstellen it_abteilung = Abteilung( "IT", 50000, {"Anton": "Developer", "Barbara": "Projektmanagerin", "Carl": "Praktikant"}) design_abteilung = Abteilung( "Design", 30000, {"David": "Designer", "Eva": "Praktikant", "Felix": "Abteilungsleiter"}) # Fusion durchführen (Ruft log_merger und __add__ auf) merged_abteilung = it_abteilung + design_abteilung # Ergebnisse ausgeben print("------------------") print(merged_abteilung) # Ruft __str__ auf print("Final mitarbeiter List:") for name, role in merged_abteilung.mitarbeiter.items(): print(f"- {name}: {role}")