getattr()
Lit un attribut d’un objet à partir d’un nom donné sous forme de chaîne, avec éventuellement une valeur par défaut.
- Renvoie
- La valeur de l’attribut, ou
default.
Exemple
#class Student:
def __init__(self, name, points):
self.name = name
self.points = points
lea = Student("Léa", 250)
print(getattr(lea, "points"))
print(getattr(lea, "level", 1))
for field in ["name", "points"]:
print(field, "=", getattr(lea, field))Définition et utilisation
#La fonction getattr(object, "name") fonctionne comme l’écriture object.name, mais vous donnez le nom de l’attribut sous forme de chaîne. Cela permet de choisir l’attribut seulement pendant l’exécution du programme, par exemple à partir de données d’un fichier, de paramètres, ou d’une commande saisie par l’utilisateur.
Quand l’attribut n’existe pas, getattr() lève une AttributeError. Avec un troisième argument, elle renvoie à la place une valeur par défaut, ce qui est utile pour des champs optionnels. Vous pouvez lire une méthode de la même façon : getattr(object, "save") renvoie la méthode, que vous appelez ensuite avec des parenthèses.
Les fonctions voisines sont hasattr() (l’attribut existe-t-il), setattr() (écrire un attribut par son nom) et delattr() (supprimer un attribut). Ne les utilisez pas là où un simple point ou un dictionnaire suffit : un code basé sur des noms stockés dans des chaînes est plus difficile à lire, et l’éditeur n’y détecte pas les fautes de frappe.
Syntaxe
#getattr(object, name)
getattr(object, name, default)Paramètres
#object
n’importe quel objet
L’objet dont vous lisez l’attribut. Cela peut aussi être une classe ou un module.name
str
Le nom de l’attribut ou de la méthode.default
optionnel
La valeur renvoyée quand l’attribut n’existe pas. Sans elle,AttributeErrorest levée.
Plus d’exemples
#class Robot:
def forward(self):
return "J’avance"
def left(self):
return "Je tourne à gauche"
robot = Robot()
for command in ["forward", "left", "jump"]:
action = getattr(robot, command, None)
print(action() if action else f"Commande inconnue : {command}")class Settings:
pass
settings = Settings()
for key, value in {"theme": "dark", "lang": "fr"}.items():
setattr(settings, key, value)
print(settings.theme, settings.lang)
try:
getattr(settings, "font")
except AttributeError as error:
print(error)Bonnes pratiques
#- N’utilisez
getattr()que lorsque le nom de l’attribut n’est vraiment connu qu’à l’exécution. Dans les autres cas, écrivezobjet.attribut. - Quand le nom d’une méthode vient de l’utilisateur, vérifiez-le par rapport à une liste de commandes autorisées, pour qu’il ne soit pas possible d’appeler une méthode que vous n’avez pas prévue.
- La fonction fonctionne aussi avec les modules :
getattr(math, "sqrt")(16)renvoie4.0.
Entrées associées
#Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.