# Task 9 — PoiType als StrEnum ## Rückblick Task 8: Python Package Ihr habt das Projekt in ein Python-Package umgewandelt. Die wichtigsten Punkte: - **Modul vs. Package:** Ein einzelnes `.py`-File ist ein Modul. Ein Ordner mit `__init__.py` ist ein Package — er kann mehrere Module bündeln und nach aussen eine saubere API exponieren. - **Relative Imports** (`from .models import POI`): Beziehen sich auf das eigene Package, sind refactoring-sicher und machen klar, dass etwas intern ist. Absolute Imports (`from overpass_project.models import POI`) funktionieren auch, sind aber abhängig vom Paketnamen. - **`from overpass import *`** ist problematisch, weil unklar ist, welche Namen importiert werden — das kann zu Namenskollisionen führen und erschwert das Lesen des Codes stark. ## Aufgabe In `main.py` steht aktuell: ```python poi_type = "bergbahn" ``` Das ist ein sogenannter **Magic String** — ein roher String, dem man nicht ansieht, welche Werte gültig sind, und der nirgends geprüft wird. **Konkret:** 1. Füge in `models.py` eine `PoiType`-Klasse hinzu, die von `StrEnum` erbt, mit den Werten `BERGBAHN` und `RESTAURANT`. 2. Ersetze in `main.py` den String `"bergbahn"` durch `PoiType.BERGBAHN`. 3. Passe den Import in `main.py` entsprechend an. **Fragen zum Nachdenken:** - Was ist der Unterschied zwischen `Enum` und `StrEnum`? - Warum ist `PoiType.BERGBAHN` besser als der String `"bergbahn"`? - Was passiert, wenn jemand `PoiType("bergbahn")` schreibt — funktioniert das? - Wo könnte ein Enum an seine Grenzen stossen?