De plus, il existe une autre méthode d'implémentation d'AutoVivification, qui consiste à surcharger directement la __missing__ méthode magique de dict. Considérez-le comme une extension.
class AutoVivification(dict):
"""Implementation of perl's autovivification feature."""
def __missing__(self, key):
value = self[key] = type(self)()
return value
Encore une chose, les versions après Python 2.5 ont ajouté le type collections.defaultdict, qui peut personnaliser un type de dict plus évolutif. Le document souligne que le principe de mise en œuvre est de surcharger la méthode __missing__. L'AutoVivification peut aussi s'exprimer ainsi :
defaultdict construit un type dict dont le premier paramètre est son default_factory Lorsque __missing__ est appelé, la valeur de retour est construite en utilisant default_factory. Plus d'exemples de defaultdict
De cette façon, vous pouvez obtenir l'effet souhaité,
Supplément : defaultdict() reçoit un paramètre par défaut, qui peut être un nom de type ou n'importe quelle fonction appelable sans paramètres C'est très utile
Vous pouvez mettre en œuvre cette structure vous-même.
Dans l'exemple suivant, AutoVivification hérite de dict
Nous pouvons utiliser l'AutoVivification comme ceci :
Sortie :
De plus, il existe une autre méthode d'implémentation d'AutoVivification, qui consiste à surcharger directement la
__missing__
méthode magique de dict. Considérez-le comme une extension.Encore une chose, les versions après Python 2.5 ont ajouté le type
collections.defaultdict
, qui peut personnaliser un type de dict plus évolutif. Le documentsouligne que le principe de mise en œuvre est de surcharger la méthode
__missing__
. L'AutoVivification peut aussi s'exprimer ainsi :defaultdict construit un type dict dont le premier paramètre est son default_factory Lorsque
__missing__
est appelé, la valeur de retour est construite en utilisant default_factory.Plus d'exemples de defaultdict
Je joindrai l'utilisation du package defaultdict :
Sortie :
De cette façon, vous pouvez obtenir l'effet souhaité,
Supplément :
defaultdict() reçoit un paramètre par défaut, qui peut être un nom de type ou n'importe quelle fonction appelable sans paramètres
C'est très utile
Sortie :