hasattr()
Vérifie si un objet a un attribut ou une méthode avec le nom donné. Renvoie True ou False.
- Renvoie
TrueouFalse.
Exemple
#class Quiz:
def __init__(self):
self.questions = 5
def check(self, answer):
return answer == "B"
quiz = Quiz()
print(hasattr(quiz, "questions"))
print(hasattr(quiz, "check"))
print(hasattr(quiz, "timer"))
print(hasattr("texte", "upper"), hasattr(42, "upper"))Définition et utilisation
#La fonction hasattr(object, "name") renvoie True si l’objet a un attribut de ce nom, et False sinon. Cela compte les attributs de l’objet lui-même, de sa classe et des classes de base, ainsi que les méthodes.
En interne, hasattr() essaie simplement de lire l’attribut via getattr() et vérifie si une AttributeError est apparue. Cela signifie que pour une propriété définie avec @property, le code du getter s’exécute réellement, et toute autre exception levée dans ce code n’est pas interceptée.
Vérifier avec hasattr() est utile avec des objets de types différents, par exemple pour appeler une méthode seulement là où elle existe. Cette approche s’appelle le duck typing : ce qui compte, c’est ce que l’objet sait faire, pas sa classe. Il est toutefois souvent plus court d’écrire directement getattr(object, "name", None), ou un bloc try avec except AttributeError.
Syntaxe
#hasattr(object, name)Paramètres
#object
n’importe quel objet
L’objet vérifié.name
str
Le nom de l’attribut ou de la méthode.
Plus d’exemples
#class Video:
def play(self):
return "Je lance la vidéo"
class Quiz:
def start(self):
return "Démarrage du quiz"
class Article:
pass
for item in [Video(), Quiz(), Article()]:
if hasattr(item, "play"):
print(item.play())
elif hasattr(item, "start"):
print(item.start())
else:
print(f"{type(item).__name__} : aucune action")class Profile:
@property
def avatar(self):
print("Je recherche un avatar...")
raise AttributeError("pas d’avatar")
profile = Profile()
print(hasattr(profile, "avatar"))Bonnes pratiques
#- Au lieu de la paire
hasattr()plus une lecture, un seul appel àgetattr(object, "name", None)suffit souvent. - Les clés d’un dictionnaire ne sont pas des attributs. Pour vérifier qu’une clé existe, utilisez l’opérateur
in. - Si ce qui compte est le type de l’objet, et non les méthodes qu’il possède, utilisez
isinstance().
Entrées associées
#- getattr()Lit un attribut d’un objet à partir d’un nom donné sous forme de chaîne, avec éventuellement une valeur par défaut.
- isinstance()Vérifie si un objet est d’un type donné, ou d’un sous-type de celui-ci.
- dir()Renvoie la liste des noms des attributs et des méthodes d’un objet.
- type()Renvoie le type d’un objet.
Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.