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)
-
objetest l'objet dont on souhaite supprimer l'attribut. -
nom_attributest 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'
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.