Python >> Tutoriel Python >  >> Python

Méthode magique Python __delattr__()

La méthode magique de Python __delattr__() implémente le delattr() intégré fonction qui prend un objet et un nom d'attribut comme arguments et supprime l'attribut de l'objet.

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

object.__delattr__(object, attr)

Examinons un exemple où vous remplacez le __delattr__ méthode magique d'une classe personnalisée Car pour changer le speed valeur d'attribut à 42 au lieu de le supprimer :

class Car:
    def __init__(self):
        self.speed = 100

    def __delattr__(self, attr):
        self.speed = 42

# Create object
porsche = Car()


print(porsche.speed)
# 100

delattr(porsche, 'speed')

print(porsche.speed)
# 42

Notez que si vous n'auriez pas remplacé le __delattr__() méthode magique, Python aurait supprimé le speed attribut qui aurait conduit à une erreur. Vous pouvez voir ce scénario ensuite dans notre récapitulatif sur le delattr() intégré fonction.

Retard arrière-plan()

delattr() intégré de Python La fonction prend un objet et un nom d'attribut comme arguments et supprime l'attribut de l'objet.

L'appel delattr(object, 'attribute') est sémantiquement identique à del object.attribute .

Avant de nous plonger dans un exemple pratique du delattr() fonction, n'hésitez pas à regarder ma vidéo explicative ici :

Plongeons-nous ensuite dans un exemple.

Tout d'abord, créez un Car objet avec un attribut speed .

# Define class with one attribute
class Car:
    def __init__(self):
        self.speed = 100


# Create object
porsche = Car()

Ensuite, imprimez l'attribut speed :

# What's the value for attribute speed?
print(porsche.speed)
# 100

Maintenant, utilisez delattr(porsche, speed) pour supprimer l'attribut speed à partir de l'objet porsche .

# Remove the attribute speed from porsche
delattr(porsche, 'speed')

Après avoir supprimé l'attribut, il n'est plus accessible :

# Does this still work?
print(porsche.speed)
# No:
'''
Traceback (most recent call last):
  File "C:\Users\xcent\Desktop\Finxter\Blog\HowToConvertBooleanToStringPython\code.py", line 18, in <module>
    print(porsche.speed)
AttributeError: 'Car' object has no attribute 'speed'
'''

Références :

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