Vous en auriez déjà découvert par mon utilisation de la terminologie que je suis un python n00b. p>
Question directe directe: p>
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)? P>
9 Réponses :
vous donnera la liste. p> par exemple: p> dir (objet) code>
a = 2
dir( a )
Faites ceci:
dir(obj)
>>> help(my_object)
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 code>, 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
_ code>, mais cela est généralement correct car de telles méthodes sont destinées à l'utilisation interne de la classe.
D'autres ont mentionné Exemple: P> 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).
>>> class Test:
... def __getattr__(self, name):
... return 'foo <%s>' % name
...
>>> t = Test()
>>> t.bar
'foo <bar>'
>>> 'bar' in dir(t)
False
... 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.
Si vous ne voulez que des méthodes, alors mais essayez ipython, il a terminé à l'onglet pour les attributs d'objet, de taper obj.
Le ralenti prend en charge la fin de l'onglet
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()
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(
+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.
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: ((division de sortie pour la lisibilité))) P> 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 Si et quand vous devez être plus sélectif, essayez: p> module de bibliothèque standard objet code>, des attributs de données spéciaux tels que
__ classe __ code>,
__ dict __ code> et
__ doc __ code>, par exemple Attributs de données (
val code>), Attributs exécutables par instance (
LAM code>), ainsi que des méthodes réelles. p>
Inspect code> est le meilleur moyen de faire l'introspection dans Python: elle s'appuie sur l'introspection intégrée crochets (tels que
dir code> 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 code>. 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 code> et de le transmettre comme deuxième argument de
getMembers code> pour adapter les résultats à votre précision, besoins exacts. p> p>
Son simple faire cela pour tout objet que vous avez créé
dir(object)