12
votes

Liste des méthodes pour la coquille Python?

Vous en auriez déjà découvert par mon utilisation de la terminologie que je suis un python n00b.

Question directe directe:

Comment puis-je voir une liste de méthodes d'un objet particulier dans une coque de Python interactif comme je peux en rubis (vous pouvez le faire dans Ruby IRB avec un "muethods" après l'objet)?


0 commentaires

9 Réponses :


10
votes

dir (objet) code>

vous donnera la liste. p>

par exemple: p>

a = 2
dir( a )


0 commentaires

2
votes

Faites ceci:

dir(obj)


0 commentaires

5
votes
>>> help(my_object)

3 commentaires

Ce n'est pas réellement correct. L'aide est utilisée pour afficher la documentation Doctring pour une méthode. par exemple. aide (string.upper). Dir (Obj) est ce qui est requis.


Correct. Si quelque chose comme .Methods dans Ruby est requis, dir (...) est la bonne réponse.


Pour une utilisation interactive (le cas d'utilisation de l'OP), c'est en fait la meilleure approche. Le système d'aide imprimera la documentation de My_Object , y compris une liste de toutes les méthodes annoncées (qu'ils possèdent ou non leur propre docstring). Il ne montrera pas de méthodes avec des noms qui commencent par _ , mais cela est généralement correct car de telles méthodes sont destinées à l'utilisation interne de la classe.



2
votes

D'autres ont mentionné dir code> . Permettez-moi de faire une remarque de prudence: les objets Python peuvent avoir un __ getattr __ code> la méthode définie qui est appelée quand on tente d'appeler une méthode non définie sur ledit objet. Évidemment dir code> ne répertorie pas tous ces noms de méthodes (infiniment nombreux). Certaines bibliothèques utilisent explicitement de cette fonctionnalité, par ex. pli (Python Lex-Yacc).

Exemple: P>

>>> class Test:
...     def __getattr__(self, name):
...         return 'foo <%s>' % name
...
>>> t = Test()
>>> t.bar
'foo <bar>'
>>> 'bar' in dir(t)
False


2 commentaires

... et transportant l'analogie de rubis de la question, une classe de rubis peut avoir une méthode remplaçée_missing qui est appelée lorsqu'il y a une tentative d'appeler une méthode non définie et bien sûr obj.methods ne peut pas savoir sur les noms de méthode destinés à être géré par METHOD_MISSING.


@MikeJ: Merci! Je n'ai aucune expérience de rubis, mais quand j'ai écrit ma réponse, cela m'a traversé que Ruby devrait avoir une fonctionnalité équivalente.



0
votes

Si vous ne voulez que des méthodes, alors xxx

mais essayez ipython, il a terminé à l'onglet pour les attributs d'objet, de taper obj. montre vous une liste d'attributs disponibles sur cet objet.


1 commentaires

Le ralenti prend en charge la fin de l'onglet



3
votes

pour une version améliorée de dir () code> Décérent voir () code>!

>>> test = [1,2,3]
>>> see(test)
    []    in    +    +=    *    *=    <    <=    ==    !=    >    >=    hash()
    help()    iter()    len()    repr()    reversed()    str()    .append()
    .count()    .extend()    .index()    .insert()    .pop()    .remove()
    .reverse()    .sort()


0 commentaires

4
votes

Python prend également l'achèvement des onglet. Je préfère mon python rapide propre (donc non merci à ipython), mais avec l'achèvement de l'onglet.

Configuration dans .bstructrc ou similaire: p>

>>> lst = []
>>> lst.
lst.__add__(           lst.__iadd__(          lst.__setattr__(
lst.__class__(         lst.__imul__(          lst.__setitem__(
lst.__contains__(      lst.__init__(          lst.__setslice__(
lst.__delattr__(       lst.__iter__(          lst.__sizeof__(
lst.__delitem__(       lst.__le__(            lst.__str__(
lst.__delslice__(      lst.__len__(           lst.__subclasshook__(
lst.__doc__            lst.__lt__(            lst.append(
lst.__eq__(            lst.__mul__(           lst.count(
lst.__format__(        lst.__ne__(            lst.extend(
lst.__ge__(            lst.__new__(           lst.index(
lst.__getattribute__(  lst.__reduce__(        lst.insert(
lst.__getitem__(       lst.__reduce_ex__(     lst.pop(
lst.__getslice__(      lst.__repr__(          lst.remove(
lst.__gt__(            lst.__reversed__(      lst.reverse(
lst.__hash__           lst.__rmul__(          lst.sort(


3 commentaires

+1 L'achèvement de l'onglet rend l'invite standard beaucoup plus agréable; Je ne sais pas pourquoi ce n'est pas sur défaut. Vous pouvez également mettre le code dans votre sitecustomize.py si vous souhaitez éviter de définir une start-up (bien que dans ce cas, vous laisseriez les empreintes). Notez que Windows et les utilisateurs de Mac n'auront pas en lecture par défaut et devront télécharger un module approprié tel que Pyreadline (Win) ou Readline.py (Mac).


Avec SiteCustomize.py, il pourrait influencer les applications Python, tandis que PythonSTARTUP dans .CASHRC fait de sorte qu'il n'importera que readline lors du démarrage de la ligne de commande. C'est si je comprends bien sitecustomize.py correctement.


Ce sera, oui, s'ils utilisent [RAW_] INPUT (). Cela est généralement plus susceptible d'être une chose utile que de vous désordre, cependant.



21
votes

Les réponses existantes font un bon travail de vous montrer comment obtenir les attributs d'un objet, mais ne répondez pas précisément à la question que vous avez posée - comment obtenir les méthodes d'un objet. Les objets Python ont un espace de noms unifié (différemment de Ruby, où des méthodes et des attributs utilisent différents espaces de noms). Considérez par exemple: xxx

((division de sortie pour la lisibilité)))

Comme vous le voyez, cela vous donne les noms de tous les attributs - y compris beaucoup de spéciaux Méthodes qui viennent d'hériter de objet , des attributs de données spéciaux tels que __ classe __ , __ dict __ et __ doc __ , par exemple Attributs de données ( val ), Attributs exécutables par instance ( LAM ), ainsi que des méthodes réelles.

Si et quand vous devez être plus sélectif, essayez: xxx

module de bibliothèque standard Inspect est le meilleur moyen de faire l'introspection dans Python: elle s'appuie sur l'introspection intégrée crochets (tels que dir et plus avancé) pour vous offrir des services d'introspection utiles, riches et simples. Ici, par exemple, vous voyez que seule une instance et des méthodes de classe spécifiquement conçues par cette classe sont affichées - pas des méthodes statiques, pas des attributs d'instance appelables ou non, pas des méthodes spéciales héritées de objet . Si vos besoins de sélectivité sont légèrement différents, il est facile de créer votre propre version modifiée de isméthod et de le transmettre comme deuxième argument de getMembers pour adapter les résultats à votre précision, besoins exacts.


0 commentaires

5
votes

Son simple faire cela pour tout objet que vous avez créé

dir(object)


0 commentaires