À quoi sert la fonction delattr ?

La fonction delattr est utilisée pour supprimer dynamiquement un attribut d'un objet.

L'instruction del objet.attribut est utilisée pour la suppression statique, tandis que delattr permet de spécifier le nom de l'attribut via une chaîne de caractères.

Syntaxe

delattr(objet, nom_attribut)
  • objet est l'objet dont on souhaite supprimer l'attribut.

  • nom_attribut est une chaîne de caractères représentant le nom de l'attribut à supprimer.

Si l'attribut n'existe pas, delattr lève une AttributeError.

Utilisation

Exemple simple :

class Produit:
    def __init__(self, nom, prix, stock):
        self.nom = nom
        self.prix = prix
        self.stock = stock

    def __str__(self):
        return f"Produit(nom='{self.nom}', prix={self.prix}, stock={self.stock})"

# Création d'une instance de Produit
produit = Produit("Laptop", 1200, 50)
print(f"Avant suppression : {produit.__dict__}")

# Supposons que l'attribut 'stock' ne soit plus nécessaire
delattr(produit, "stock")

print(f"Après suppression : {produit.__dict__}")

# Tenter d'accéder à l'attribut supprimé lèvera une erreur
# print(produit.stock)  # AttributeError: 'Produit' object has no attribute 'stock'
Un instant

Dans cet exemple, nous supprimons l'attribut stock.

À noter

Avant de continuer la lecture de ce glossaire, je vous invite à consulter celui sur la fonction hasattr.

Ci-dessous, un exemple qui montre la flexibilité de delattr. Nous ne connaissons pas les noms des attributs à l'avance. On utilise une approche LBYL pour vérifier si l'attribut existe avec hasattr avant de le supprimer (une approche EAFP pourrait utiliser l'erreur AttributeError et un bloc Try / Except pour tenter la suppression de l'attribut et gérer le cas où celui-ci n'existe pas).

class ConfigurationUtilisateur:
    def __init__(self):
        self.nom = "Alice"
        self.email = "[email protected]"
        self.telephone = "0123456789"

config = ConfigurationUtilisateur()

print(f"Données avant nettoyage : {config.__dict__}")

# Demander à l'utilisateur quel champ il souhaite supprimer
champ_a_supprimer = input("Quel champ souhaitez-vous supprimer (nom, email, telephone) ? ")

# Utiliser delattr pour supprimer l'attribut de manière dynamique et sécurisée
if hasattr(config, champ_a_supprimer):
    delattr(config, champ_a_supprimer)
    print(f"Le champ '{champ_a_supprimer}' a été supprimé.")
else:
    print(f"Le champ '{champ_a_supprimer}' n'existe pas.")

print(f"Données après nettoyage : {config.__dict__}")

Dans cet exemple, le nom de l'attribut est saisi par l'utilisateur et stocké dans une variable. hasattr est utilisé en amont de delattr pour vérifier que l'attribut existe, puis on le supprime.

Vous pouvez aussi consulter nos glossaires sur :

Bravo, tu es prêt à passer à la suite

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.