capypad
0 Tage Serie
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
python
1
2
3
4
5
6
7
8
9
10
11
12
13
from typing import Protocol, runtime_checkable
 
@runtime_checkable
class 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.