python / expert
Snippet
Modell-Validierungsdeskriptoren zur Typ-Erzwingung in Django
Das Python-Deskriptor-Protokoll (`__get__`, `__set__`, `__set_name__`) ermöglicht die Kapselung von Typvalidierungs- und Bereinigungslogik auf Attribut-Ebene vor der Datenbank-Persistierung eines Modells.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
12
13
class StrictStringDescriptor:def __set_name__(self, owner, name):self.private_name = f'_{name}'def __get__(self, instance, owner):if instance is None:return selfreturn getattr(instance, self.private_name, '')def __set__(self, instance, value):if not isinstance(value, str):raise TypeError(f'Attribute must be a string, got {type(value).__name__}')setattr(instance, self.private_name, value.strip())
django
Erklärung
1
def __set_name__(self, owner, name):
Erfasst automatisch den Namen des Attributs bei der Zuweisung in der Klassendefinition.
2
def __get__(self, instance, owner):
Liefert den Wert des internen Instanzattributs oder die Deskriptor-Referenz zurück.
3
def __set__(self, instance, value):
Fängt Zuweisungen an Instanzattribute ab, um strikte Laufzeit-Typanforderungen durchzusetzen.