python / expert
Snippet
Deskriptorbasierter Modellfeld-Eigenschaftszugriff für dynamisches Typ-Casting
Benutzerdefinierte Python-Deskriptoren fangen den Attributzugriff auf Modellinstanzen ab, um Typumwandlungen zur Laufzeit durchzuführen, während primitive Formate im Instanz-State-Dictionary erhalten bleiben.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class TypedAttributeDescriptor:def __init__(self, field_name: str, target_type: type):self.field_name = field_nameself.target_type = target_typedef __get__(self, instance, owner=None):if instance is None:return selfraw_val = instance.__dict__.get(self.field_name)if raw_val is None:return Nonereturn self.target_type(raw_val)def __set__(self, instance, value):instance.__dict__[self.field_name] = str(value) if value is not None else None
django
Erklärung
1
def __get__(self, instance, owner=None):
Python-Deskriptor-Getter, der beim Zugriff auf das Attribut einer Klasseninstanz aufgerufen wird.
2
if instance is None: return self
Gibt die Deskriptor-Referenz selbst zurück, wenn direkt über das Klassenobjekt zugegriffen wird.
3
return self.target_type(raw_val)
Wandelt rohe String-Werte aus dem Dictionary beim Zugriff dynamisch in den Ziel-Typ um.