54 lines
2.1 KiB
Python
54 lines
2.1 KiB
Python
# 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}")
|