Étant donné un objet Python de toute sorte, existe-t-il un moyen facile d'obtenir la liste de toutes les méthodes dont cet objet dispose?
Ou,
si cela n'est pas possible, existe-t-il au moins un moyen facile de vérifier si elle a une méthode particulière autre que de simplement vérifier si une erreur se produit lors de l'appel de la méthode?
python
introspection
Thomas Lötzer
la source
la source
Réponses:
Pour de nombreux objets , vous pouvez utiliser ce code, en remplaçant «objet» par l'objet qui vous intéresse:
Je l'ai découvert sur diveintopython.net (maintenant archivé). J'espère que cela devrait fournir plus de détails!
Si vous obtenez un
AttributeError
, vous pouvez l'utiliser à la place :getattr(
est intolérant aux sous-classes virtuelles abstraites de style python3.6 pandas. Ce code fait la même chose que ci-dessus et ignore les exceptions.la source
print [method for method in dir(object) if callable(getattr(object, method))]
.AttributeError: module 'pandas.core.common' has no attribute 'AbstractMethodError'
quand j'essaye d'exécuter ceci. Voir les détails sur stackoverflow.com/q/54713287/9677043 .Vous pouvez utiliser la
dir()
fonction intégrée pour obtenir une liste de tous les attributs d'un module. Essayez ceci sur la ligne de commande pour voir comment cela fonctionne.En outre, vous pouvez utiliser la
hasattr(module_name, "attr_name")
fonction pour savoir si un module a un attribut spécifique.Voir le Guide sur l'introspection Python pour plus d'informations.
la source
hasattr
aidé mon cas d'utilisation pour trouver si l'objet python a une variable ou une méthode membre particulière.La méthode la plus simple est d'utiliser
dir(objectname)
. Il affichera toutes les méthodes disponibles pour cet objet. Truc cool.la source
AttributeError: module 'pandas.core.common' has no attribute 'AbstractMethodError'
. Des idées? Voir les détails sur stackoverflow.com/q/54713287/9677043 . +1 à @Pawan Kumar b / c la réponse fonctionne, et à @ljs pour la promesse d'une liste filtrée des méthodes uniquement.Pour vérifier s'il a une méthode particulière:
la source
if hasattr(obj,method) and callable(getattr(obj,method)):
Je crois que ce que vous voulez est quelque chose comme ça:
À mon humble avis, la fonction intégrée
dir()
peut faire ce travail pour vous. Extrait de lahelp(dir)
sortie sur votre shell Python:Par exemple:
Alors que je vérifiais votre problème, j'ai décidé de montrer mon cheminement de pensée, avec un meilleur formatage de la sortie de
dir()
.dir_attributes.py (Python 2.7.6)
dir_attributes.py (Python 3.4.3)
J'espère que j'ai contribué :).
la source
En plus des réponses plus directes, je m'en voudrais de ne pas mentionner iPython . Appuyez sur «tab» pour voir les méthodes disponibles, avec saisie semi-automatique.
Et une fois que vous avez trouvé une méthode, essayez:
pour voir les pydocs, la signature de méthode, etc.
Ahh ... REPL .
la source
Si vous souhaitez spécifiquement des méthodes , vous devez utiliser inspect.ismethod .
Pour les noms de méthode:
Pour les méthodes elles-mêmes:
Parfois, cela
inspect.isroutine
peut aussi être utile (pour les fonctions intégrées, les extensions C, Cython sans la directive du compilateur "contraignant").la source
inspect.getmembers
au lieu d'utiliserdir
dans une liste de compréhension?Ouvrez le shell bash (ctrl + alt + T sur Ubuntu). Démarrez le shell python3 dedans. Créer un objet pour observer les méthodes. Ajoutez simplement un point après et appuyez deux fois sur "tab" et vous verrez quelque chose comme ça:
la source
ipython
, commencer à taper l'objet et appuyer surtab
et cela fonctionnera également. Aucun paramètre de ligne de lecture nécessaireLe problème avec toutes les méthodes indiquées ici est que vous NE POUVEZ PAS être sûr qu'une méthode n'existe pas.
En Python, vous pouvez intercepter le point appelant à travers
__getattr__
et__getattribute__
, permettant de créer une méthode "lors de l'exécution"Exemple:
Si vous l'exécutez, vous pouvez appeler une méthode non existante dans le dictionnaire d'objets ...
Et c'est pourquoi vous utilisez le plus simple pour demander pardon que les paradigmes d' autorisation en Python.
la source
La façon la plus simple d'obtenir la liste des méthodes de n'importe quel objet est d'utiliser la
help()
commande.Il répertorie toutes les méthodes disponibles / importantes associées à cet objet.
Par exemple:
la source
%
premier exemple? Cela ne fonctionne pas dans mon Python 2.7.Cela devrait fonctionner :)
la source
On peut créer une
getAttrs
fonction qui renverra les noms des propriétés appelables d'un objetÇa reviendrait
la source
Il n'existe aucun moyen fiable de répertorier toutes les méthodes des objets.
dir(object)
est généralement utile, mais dans certains cas, il peut ne pas répertorier toutes les méthodes. Selon ladir()
documentation : "Avec un argument, essayez de renvoyer une liste d'attributs valides pour cet objet."La vérification de l'existence de cette méthode peut être effectuée
callable(getattr(object, method))
comme indiqué précédemment.la source
Prendre une liste comme objet
list(filter(lambda x:callable(getattr(obj,x)),obj.__dir__()))
Vous obtenez:
la source
Alors que " Plus facile de demander pardon que permission " est certainement la voie Pythonique, ce que vous recherchez peut-être:
la source
Afin de rechercher une méthode spécifique dans un module entier
la source
Si vous utilisez, par exemple, shell plus, vous pouvez l'utiliser à la place:
de cette façon, avec le "??" juste après votre objet, il vous montrera tous les attributs / méthodes de la classe.
la source