python / expert
Snippet
Deskriptor zur trägen Deserialisierung von Modellfeldern in Django
Nutzt das Deskriptor-Protokoll von Python, um rohe String-Attribute bei Eigenschaftszugriff träge in strukturierte JSON-Dictionaries zu parsen.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import jsonfrom typing import Any, Typeclass LazyJSONDescriptor:def __init__(self, field_name: str):self.field_name = field_namedef __get__(self, instance: Any, owner: Type[Any]) -> Any:if instance is None:return selfraw_val = instance.__dict__.get(self.field_name)if isinstance(raw_val, str):parsed = json.loads(raw_val)instance.__dict__[self.field_name] = parsedreturn parsedreturn raw_valdef __set__(self, instance: Any, value: Any) -> None:instance.__dict__[self.field_name] = value
django
Erklärung
1
class LazyJSONDescriptor:
Definiert einen benutzerdefinierten Python-Eigenschaftsdeskriptor zur Attributverwaltung.
2
def __get__(self, instance: Any, owner: Type[Any]) -> Any:
Fängt den Lesezugriff auf Attribute von Modellinstanzen ab.
3
raw_val = instance.__dict__.get(self.field_name)
Liest den internen Dictionary-Wert direkt ohne Rekursionsauslösung.
4
instance.__dict__[self.field_name] = parsed
Speichert geparste Daten für schnelle Folgezugriffe direkt im Instanz-Dictionary.