overpass/TASK.md

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__.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:

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?