Lorsque l’on manipule des objets provenant de librairies tierces, en Python, il arrive souvent que l’on se demande quels sont les attributs de cet objet.
NB : Ici, on entend « attribut » au sens large « attributs + méthodes ».
Une solution est bien souvent d’aller regarder la documentation de la librairie en question.
Néanmoins, toutes les librairies n’ont pas nécessairement une documentation exhaustive facile d’accès et aller dans la documentation nécessite de faire une recherche Internet.
À la place, il existe la possibilité, directement avec des fonctions intégrées, de lister les attributs d’un objet Python.
Une autre approche est de tester directement si l’objet qui nous intéresse possède un attribut d’un certain nom. (Par exemple, est-ce que ma variable model a un attribut fit ?)
🚩Problème :
Comment tester si un objet Python possède un attribut donné ?
✅ Solution :
Utiliser la fonction hasattr directement intégrée à Python.
hasattr(x, attribut)
Ici, pour une variable x et un nom d’attribut attribut, hasattr(x, attribut) renvoie un booléen dont la valeur indique si x possède un attribut dont le nom est la valeur de attribut.
🤠 Exemple :
Donnons un exemple avec un objet familier, en provenance de la librairie scikit-learn, j’ai nommé sklearn.ensemble.RandomForestClassifier.
Deux questions :
- Cet objet possède-t-il un attribut
predict? - Cet objet possède-t-il un attribut
transform?
Si vous connaissez déjà le fonctionnement des Random Forests, vous pouvez déjà essayer de deviner la réponse à ces questions.
Autrement, on peut appliquer la fonction hasattr comme suit :
from sklearn.ensemble import RandomForestClassifier
estimator = RandomForestClassifier()
attribut = "predict"
hasattr(estimator, attribut)

predictOn voit que predict est bien un attribut de sklearn.ensemble.RandomForestClassifier.
from sklearn.ensemble import RandomForestClassifier
estimator = RandomForestClassifier()
attribut = "transform"
hasattr(estimator, attribut)

transformEn revanche, transform n’est pas un attribut de cet objet.
À présent, on peut confirmer en allant regarder la documentation :
Si ces attributs existaient pour un modèle, ils seraient listés parmi les méthodes de l’objet RandomForestClassifier :

(Extrait de la documentation de sklearn 1.3.2.)
On voit qu’il existe bien une méthode predict est listée mais qu’il n’y a pas de méthode transform.

Laisser un commentaire