====== LU11b - Abstrakte Klassen in Python ======
Standardmässig stellt Python keine abstrakten Klassen bereit.
Das Modul ''%%abc%%'' stellt die Basis für die Definition von Abstract Base Classes ''%%ABC%%'' bereitstellt.
''%%ABC%%'' funktioniert, indem Methoden der Basisklasse als “abstrakt dekoriert” und dann konkrete Klassen als Implementierungen der abstrakten Basis registriert werden.
Eine Methode wird abstrakt, wenn sie mit dem Schlüsselwort ''%%@abstractmethod%%'' dekoriert wird. Zum Beispiel so:
==== Beispiel: Abstrakte Klasse für Vielecke (Polygon) ====
from abc import ABC, abstractmethod
class Polygon(ABC):
"""
Ein unbestimmtes Polygon, das
a) weiss, dass es eine gewisse Anzahl Seiten hat
b) aber nicht weiss, wie viele es wirklich sind.
"""
def __init__(self):
"""
Konstruktor: Könnte auch weggelassen werden, solange keine Attribute gesetzt werden.
"""
pass
@abstractmethod
def my_sides(self):
"""
Abstrakte Methode ohne Implementierung. Diese muss
zwingend in einer abgeleiteten Klasse erfolgen.
"""
pass
class Triangle(Polygon):
# overriding abstract method
def my_sides(self):
print('I have 3 sides')
class Quadrilateral(Polygon):
# overriding abstract method
def my_sides(self):
print('I have 4 sides')
if __name__ == '__main__':
polygons = [
Triangle(),
Quadrilateral(),
]
for p in polygons:
p.my_sides()
Output:
I have 3 sides
I have 4 sides
Beachten Sie hier die Nutzung der Polymorphie, um gleichartige Objekte (Triangle, Quadrilateral) gleich zu behandeln - konkret durch den Aufruf der (überschriebenen) Methode ''my_sides''.
----
[[https://creativecommons.org/licenses/by-nc-sa/4.0/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] (c) Danie Fahrni, René Probst bearbeitet durch Marcel Suter