1.5 KiB
1.5 KiB
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__.pyist 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:
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:
- Füge in
models.pyeinePoiType-Klasse hinzu, die vonStrEnumerbt, mit den WertenBERGBAHNundRESTAURANT. - Ersetze in
main.pyden String"bergbahn"durchPoiType.BERGBAHN. - Passe den Import in
main.pyentsprechend an.
Fragen zum Nachdenken:
- Was ist der Unterschied zwischen
EnumundStrEnum? - Warum ist
PoiType.BERGBAHNbesser als der String"bergbahn"? - Was passiert, wenn jemand
PoiType("bergbahn")schreibt — funktioniert das? - Wo könnte ein Enum an seine Grenzen stossen?