hasattr()

Vérifie si un objet a un attribut ou une méthode avec le nom donné. Renvoie True ou False.

Renvoie
True ou False.
Sur cette page

Exemple

#
Python
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"))
Résultatrésultat enregistré, vous pouvez le vérifier
True
True
False
True False

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

#
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

#
Duck typing : appeler si la méthode existe
Python
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")
Résultatrésultat enregistré, vous pouvez le vérifier
Je lance la vidéo
Démarrage du quiz
Article : aucune action
hasattr() exécute le code de la propriété
Python
class Profile:
    @property
    def avatar(self):
        print("Je recherche un avatar...")
        raise AttributeError("pas d’avatar")

profile = Profile()
print(hasattr(profile, "avatar"))
Résultatrésultat enregistré, vous pouvez le vérifier
Je recherche un avatar...
False

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

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.