
Perfektionierung des Überschreibens von Dict-Unterklassen
Einführung
Um eine fehlerfreie Dict-Unterklasse zu erstellen, müssen wichtige Nuancen, Beizeffekte und effiziente Methodenüberschreibungen berücksichtigt werden . Dieser Artikel bietet einen umfassenden Ansatz zum Erreichen dieses Ziels.
Übergeordnete Überlegungen
-
Schlüsselhandhabung: Um Kleinbuchstaben zu erreichen, überschreiben Sie vorher __getitem__ und __setitem__, um Schlüssel umzuwandeln Zugriff auf das Diktat. Um get zu aktivieren, überschreiben Sie __setitem__, um den Schlüsselzwang zu handhaben.
-
Beizen: Ja, das Diktieren von Unterklassen kann sich auf das Beizen auswirken. Um die Kompatibilität sicherzustellen, implementieren Sie __setstate__, __getstate__ und __reduce__.
-
Erforderliche Methoden: Überschreiben Sie wichtige Methoden wie __repr__, update und __init__ für vollständige Funktionalität.
Verwenden von MutableMapping
Anstatt dict direkt in Unterklassen zu unterteilen, sollten Sie die Verwendung der abstrakten Basisklasse MutableMapping (ABC) aus dem Modul „collections.abc“ in Betracht ziehen. Es stellt eine Vorlage mit erforderlichen Methoden bereit und hilft, fehlende Implementierungen zu verhindern.
Codebeispiel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | from collections.abc import MutableMapping
class TransformedDict(MutableMapping):
def __init__(self, *args, **kwargs):
self.store = dict()
self.update(dict(*args, **kwargs)) # use the free update to set keys
def __getitem__(self, key):
return self.store[self._keytransform(key)]
def __setitem__(self, key, value):
self.store[self._keytransform(key)] = value
def __delitem__(self, key):
del self.store[self._keytransform(key)]
def __iter__(self):
return iter(self.store)
def __len__(self):
return len(self.store)
def _keytransform(self, key):
return key
class lcdict(TransformedDict):
def _keytransform(self, key):
return key.lower()
|
Nach dem Login kopieren
Diese Unterklasse von TransformedDict erreicht die gewünschte Kleinbuchstaben-Schlüsselfunktionalität:
1 2 3 4 | s = lcdict([( 'Test' , 'test' )])
assert s.get( 'TEST' ) is s[ 'test' ]
assert 'TeSt' in s
|
Nach dem Login kopieren
Fazit
Wenn man die Feinheiten des Überschreibens von Diktaten und der Nutzung von ABCs versteht, kann man eine „perfekte“ Diktunterklasse erstellen. Dieser Ansatz gewährleistet die Schlüsselmanipulation, Beizkompatibilität und vollständige Methodenabdeckung und bietet Entwicklern flexible und leistungsstarke Datenstrukturen.
Das obige ist der detaillierte Inhalt vonWie kann ich meine „dict'-Unterklasse für eine effiziente Schlüsselhandhabung und Beizen perfektionieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!