-
Notifications
You must be signed in to change notification settings - Fork 4
Closed
Labels
Description
The following code visualizes in 6 steps, breaking into wypp code at the line
@record
class Confluence:Here's the code:
from __future__ import annotations
from wypp import *
# Ein Flussabschnitt ist entweder
# - ein Bach mit Namen und Quelle, oder
# - ein Zusammenfluss eines Haupt- und Nebenflussabschnitts an einem bestimmten Ort.
type RiverSection = Union[Creek, Confluence]
# Ein Bach hat folgende Eigenschaften:
# - Quelle (Typ: str)
# - Name (Typ: str)
@record
class Creek:
origin: str
name: str
# Ein Zusammenfluss hat folgende Eigenschaften:
# - Ort des Zusammentreffens (Typ: str)
# - Hauptflussabschnitt (Typ: RiverSection)
# - Nebenflussabschnitt (Typ: RiverSection)
@record
class Confluence:
location: str
mainStem: RiverSection
tributary: RiverSection
kinzig1 = Creek('Loßburg', 'Kinzig')
gutach1 = Creek('Schönwald', 'Gutach')
kinzig2 = Confluence('Hausach', kinzig1, gutach1)
schutter1 = Creek('Schweighausen', 'Schutter')
heidengraben1 = Creek('Lahr', 'Heidengraben')
schutter2 = Confluence('Lahr', schutter1, heidengraben1)
kinzig3 = Confluence('Kehl', kinzig2, schutter2)
# Name eines Flussabschnitts bestimmen
# Eingabe: ein Flussabschnitt (Typ: RiverSection)
# Ergebnis: Name des Flussabschnitts (Typ: str)
def riverName(section: RiverSection) -> str:
if isinstance(section, Creek): # es handelt sich um einen Bach
return section.name
else: # es handelt sich um einen Zusammenfluss
return riverName(section.mainStem)
check(riverName(kinzig1), 'Kinzig')
check(riverName(kinzig2), 'Kinzig')
check(riverName(kinzig3), 'Kinzig')
check(riverName(schutter1), 'Schutter')
check(riverName(schutter2), 'Schutter')