
Parfaitement du remplacement de la sous-classe Dict
Introduction
Pour créer une sous-classe parfaite de dict, il faut prendre en compte les nuances clés, les effets de décapage et les remplacements de méthodes efficaces . Cet article propose une approche globale pour atteindre cet objectif.
Considérations primordiales
-
Gestion des clés : Pour obtenir des clés minuscules, remplacez __getitem__ et __setitem__ pour transformer les clés avant accéder au dict. Pour activer get, remplacez __setitem__ pour gérer la coercition des clés.
-
Pickling : Oui, le sous-classement de dict peut affecter le décapage. Pour garantir la compatibilité, implémentez __setstate__, __getstate__ et __reduce__.
-
Méthodes requises : Remplacez les méthodes essentielles telles que __repr__, update et __init__ pour une fonctionnalité complète.
Utilisation de MutableMapping
Au lieu de sous-classer directement dict, envisagez d'utiliser la classe de base abstraite MutableMapping (ABC) du module collections.abc. Il fournit un modèle avec les méthodes requises et aide à éviter les implémentations manquantes.
Exemple de code
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()
|
Copier après la connexion
Cette sous-classe de TransformedDict atteint la fonctionnalité de clé minuscule souhaitée :
1 2 3 4 | s = lcdict([( 'Test' , 'test' )])
assert s.get( 'TEST' ) is s[ 'test' ]
assert 'TeSt' in s
|
Copier après la connexion
Conclusion
En comprenant les subtilités du remplacement des dictées et de l'exploitation des ABC, on peut créer une sous-classe de dictées « parfaite ». Cette approche garantit la manipulation des clés, la compatibilité du décapage et une couverture complète des méthodes, offrant ainsi aux développeurs des structures de données flexibles et puissantes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!