python / expert
Snippet
Strukturelle Untertypisierung mit Protokollen
Protokolle (PEP 544) ermöglichen statisches Duck Typing. Im Gegensatz zur Standardvererbung wird eine Klasse als Untertyp eines Protokolls betrachtet, wenn sie lediglich die erforderlichen Methoden implementiert, ohne explizit von der Protokollklasse erben zu müssen.
snippet.py
1
2
3
4
5
6
7
8
9
10
11
12
13
from typing import Protocol, runtime_checkable@runtime_checkableclass Drawable(Protocol):def draw(self) -> str: ...class Circle:def draw(self) -> str: return "Circle drawn"def render(obj: Drawable):if isinstance(obj, Drawable):return obj.draw()return "Not drawable"
Erklärung
1
class Drawable(Protocol):
Definiert eine Vorlage, die jedes Objekt erfüllen kann, das eine 'draw'-Methode besitzt.
2
@runtime_checkable
Ermöglicht die Verwendung von isinstance() zur Laufzeit, um zu prüfen, ob ein Objekt dem Protokoll entspricht.