Python >> Tutoriel Python >  >> Python

Méthode magique Python __delitem__()

La méthode magique de Python __delitem__(self, key) implémente la suppression de self[key] . Donc, si vous appelez del self[key] , Python appellera self.__delitem__(key) .

Nous appelons cela une "méthode Dunder" pour "D ouble Sous Méthode de score" (également appelée "méthode magique" ). Pour obtenir une liste de toutes les méthodes de dunder avec des explications, consultez notre article sur la feuille de triche de dunder sur ce blog.

Syntaxe et exemple minimal

object.__delitem__(self, key)

Examinons un exemple où vous remplacez le __delitem__ méthode magique d'une classe personnalisée HelloWorld.

class HelloWorld:
    def __delitem__(self, key):
        print('hello world', key)

hi = HelloWorld()

del hi[42]
# hello world 42

del hi['wide web']
# hello world wide web

Ce code montre plusieurs choses intéressantes :

  • Vous utilisez le del mot-clé pour initier le __delitem__ appeler.
  • Vous utilisez del obj[key] appeler le obj.__delitem__(key) .
  • Vous pouvez lui transmettre des clés arbitraires.

Cependant, ceci n'est qu'un exemple factice, regardons un exemple complet implémentant toutes les méthodes __getitem__ , __setitem__ , et __delitem__ qui s'associent magnifiquement pour implémenter un type de données personnalisé semblable à une collection.

Exemple complet

Dans l'exemple suivant, vous créez un type de type liste personnalisé qui remplace le __getitem__ , __setitem__ , et __delitem__ méthodes.

class MyList:
    def __init__(self, lst):
        self.lst = lst

    def __getitem__(self, key):
        print('__getitem__', key)
        return self.lst[key]

    def __setitem__(self, key, value):
        print('__setitem__', key, value)
        self.lst[key] = value

    def __delitem__(self, key):
        print('__delitem__', key)
        del self.lst[key]

Chaque fois que vous ajoutez un nouvel élément, obtenez un élément ou supprimez un élément de votre liste personnalisée, il imprime les informations respectives afin que vous puissiez voir ce qui se passe.

Maintenant, utilisons ceci pour créer un wrapper de liste simple et imprimons le deuxième élément avec l'index 1 (indexation basée sur zéro).

my = MyList(['alice', 'bob', 'carl'])

print(my[1])
# __getitem__ 1
# bob

Notez comment Python appelle d'abord l'instruction print dans le __getitem__ sortie et clé 1 puis renvoie l'élément my[1] lui-même, le met dans le print(...) instruction qui aboutit à la sortie bob .

Ensuite, vous écrasez la valeur du deuxième élément de la liste avec l'index 1 :

my[1] = '42'
print(my[1])
# __setitem__ 1 42
# __getitem__ 1
# 42

Vous pouvez voir sur la sortie d'impression __setitem__ 1 42 ce __setitem__ a été appelé avec la clé 1 et la valeur 42 .

Ensuite, vous supprimez un élément avec l'expression del my[1] :

del my[1]
print(my[1])
# carl

Références :

  • https://docs.python.org/3/reference/datamodel.html