2009-03-26 16 views
25

¿Existe una función en Python para listar los atributos y métodos de un objeto en particular?¿Existe una función en Python para listar los atributos y métodos de un objeto en particular?

Algo así como:

ShowAttributes (myObject) 

    -> .count 
    -> .size 

ShowMethods (myObject) 

    -> len 
    -> parse 
+0

duplicado: http://stackoverflow.com/questions/546337/how-do-i-perform-introspection-on-an-object-in-python-2-x –

+0

Y esto, también: http://stackoverflow.com/questions/192109/ is-there-a-function-in-python-to-print-all-the-current-properties-and-values-of-a –

+0

['property'] (https://docs.python.org/ 2/library/functions.html? Highlight = property # property) es un nombre dado a un concepto diferente en python. el término 'atributo 'te conviene más. una lectura en profundidad que me gusta, sobre ambos es http://www.cafepy.com/article/python_attributes_and_methods/python_attributes_and_methods.html – n611x007

Respuesta

42

que desea buscar en la función dir():

>>> li = [] 
>>> dir(li)  
['append', 'count', 'extend', 'index', 'insert', 
'pop', 'remove', 'reverse', 'sort'] 

li es una lista, por lo dir(li) devuelve una lista de todos los métodos de una lista. Tenga en cuenta que la lista devuelta contiene los nombres de los métodos como cadenas, no los métodos en sí mismos.


Editar en respuesta al comentario:

Sin esto va a mostrar todos los métodos heredados también. Considere este ejemplo:

test.py:

class Foo: 
    def foo(): pass 

class Bar(Foo): 
    def bar(): pass 

Python intérprete:

>>> from test import Foo, Bar 
>>> dir(Foo) 
['__doc__', '__module__', 'foo'] 
>>> dir(Bar) 
['__doc__', '__module__', 'bar', 'foo'] 

Cabe señalar quePython's documentation estados:

Nota: Debido dir() se suministra principalmente como una conveniencia para el uso en un sistema interactivo pronta, trata de suministrar un interesante conjunto de nombres más de lo que trata de suministrar una rigurosamente o consistentemente definido establecer de nombres, y su comportamiento detallado puede cambiar en las versiones. Para el ejemplo , los atributos de metaclase no son en la lista de resultados cuando el argumento es una clase.

Por lo tanto, no es seguro utilizarlo en su código. Use vars() en su lugar. Vars() no incluye información acerca de las superclases, deberá recolectarlas usted mismo.


Si está utilizando dir() a encontrar información en una intérprete interactivo, considere el uso de help().

+0

Además, esto solo enumera los métodos directamente aplicables a este tipo de objeto, no su clase principal o la clase padre de los padres, ¿verdad? –

+0

No, métodos heredados también, por favor vea mi edición. –

+0

gracias, aprendí de esto también. –

10

¿No dir() y VARs() le conviene?

+0

Impresionante, no sabía esto. –

+1

Todos deben leer este http://docs.python.org/library/functions.html justo después de leer el tutorial de Python. – Anonymous

1

Otra forma de hacerlo es con el ingenioso entorno IPython. Te permite completar la pestaña para encontrar todos los métodos y campos de un objeto.

8

y de una forma más legible, se puede utilizar see:

In [1]: from see import see 
In [2]: x = "hello world!" 
In [3]: see(x) 
Out[3]: 
    [] in + * % < <= == != > >= hash() help() len() 
    repr() str() .capitalize() .center() .count() .decode() 
    .encode() .endswith() .expandtabs() .find() .format() .index() 
    .isalnum() .isalpha() .isdigit() .islower() .isspace() .istitle() 
    .isupper() .join() .ljust() .lower() .lstrip() .partition() 
    .replace() .rfind() .rindex() .rjust() .rpartition() .rsplit() 
    .rstrip() .split() .splitlines() .startswith() .strip() 
    .swapcase() .title() .translate() .upper() .zfill() 
+0

¡excelente! Una cosa que echo de menos es que no puede obtener 'help()' o '__doc__' para algo como' <= ', por lo que debe saber lo que está haciendo ya, con respecto a los operadores. bueno, si no conoces sus métodos mágicos desde la cabeza. :) en conjunto un problema menor y un excelente paquete! – n611x007

1

Es sorprendente para mí que nadie mencionó la función de objeto de Python:
keys()

+1

Sí, es sorprendente: p –

Cuestiones relacionadas