Dado un objeto Python de cualquier tipo, ¿hay una manera fácil de obtener la lista de todos los métodos que tiene este objeto?
O,
Si esto no es posible, ¿existe al menos una manera fácil de verificar si tiene un método en particular que no sea simplemente verificar si se produce un error cuando se llama al método?
python
introspection
Thomas Lötzer
fuente
fuente
Respuestas:
Para muchos objetos , puede usar este código, reemplazando 'objeto' con el objeto que le interesa:
Lo descubrí en diveintopython.net (ahora archivado). ¡Con suerte, eso debería proporcionar más detalles!
Si obtienes un
AttributeError
, puedes usar esto en su lugar :getattr(
es intolerante a las subclases virtuales abstractas de estilo pandas python3.6. Este código hace lo mismo que el anterior e ignora las excepciones.fuente
print [method for method in dir(object) if callable(getattr(object, method))]
.AttributeError: module 'pandas.core.common' has no attribute 'AbstractMethodError'
cuando intento ejecutar esto. Consulte los detalles en stackoverflow.com/q/54713287/9677043 .Puede usar la
dir()
función integrada para obtener una lista de todos los atributos que tiene un módulo. Pruebe esto en la línea de comando para ver cómo funciona.Además, puede usar la
hasattr(module_name, "attr_name")
función para averiguar si un módulo tiene un atributo específico.Consulte la Guía de introspección de Python para obtener más información.
fuente
hasattr
ayudó a mi caso de uso a encontrar si el objeto python tiene una variable miembro o método particular.El método más simple es usar
dir(objectname)
. Mostrará todos los métodos disponibles para ese objeto. Buen truco.fuente
AttributeError: module 'pandas.core.common' has no attribute 'AbstractMethodError'
. ¿Algunas ideas? Consulte los detalles en stackoverflow.com/q/54713287/9677043 . +1 a @Pawan Kumar b / c la respuesta funciona, y a @ljs por la promesa de una lista filtrada de solo los métodos.Para verificar si tiene un método particular:
fuente
if hasattr(obj,method) and callable(getattr(obj,method)):
Creo que lo que quieres es algo como esto:
En mi humilde opinión, la función integrada
dir()
puede hacer este trabajo por usted. Tomado de lahelp(dir)
salida en su Python Shell:Por ejemplo:
Mientras revisaba su problema, decidí demostrar mi línea de pensamiento, con un mejor formato de la salida de
dir()
.dir_attributes.py (Python 2.7.6)
dir_attributes.py (Python 3.4.3)
Espero haber contribuido :).
fuente
Además de las respuestas más directas, sería negligente si no mencionara iPython . Presione 'tab' para ver los métodos disponibles, con autocompletado.
Y una vez que haya encontrado un método, intente:
para ver los pydocs, la firma del método, etc.
Ahh ... REPL .
fuente
Si desea métodos específicamente , debe usar inspect.ismethod .
Para nombres de métodos:
Para los métodos en sí mismos:
A veces también
inspect.isroutine
puede ser útil (para incorporados, extensiones C, Cython sin la directiva del compilador "vinculante").fuente
inspect.getmembers
lugar de usardir
en una lista de comprensión?Abra bash shell (ctrl + alt + T en Ubuntu). Inicie python3 shell en él. Crear objeto para observar métodos de. Simplemente agregue un punto después y presione dos veces "tab" y verá algo así:
fuente
ipython
, comenzar a escribir el objeto y presionartab
y funcionará también. No hay ajustes necesarios readlineEl problema con todos los métodos indicados aquí es que NO PUEDE asegurarse de que no exista un método.
En Python puede interceptar el punto llamando a través
__getattr__
y__getattribute__
, haciendo posible crear el método "en tiempo de ejecución"Ejemplo:
Si lo ejecuta, puede llamar al método no existente en el diccionario de objetos ...
Y es por eso que usa el más fácil para pedir perdón que los paradigmas de permisos en Python.
fuente
La forma más sencilla de obtener una lista de métodos de cualquier objeto es usar el
help()
comando.Enumerará todos los métodos disponibles / importantes asociados con ese objeto.
Por ejemplo:
fuente
%
en el primer ejemplo? No funciona en mi Python 2.7.Esto debería funcionar :)
fuente
Uno puede crear una
getAttrs
función que devolverá los nombres de propiedad invocables de un objetoEso volvería
fuente
No hay una forma confiable de enumerar todos los métodos de los objetos.
dir(object)
suele ser útil, pero en algunos casos puede no enumerar todos los métodos. Según ladir()
documentación : "Con un argumento, intente devolver una lista de atributos válidos para ese objeto".La comprobación de que ese método existe puede hacerse
callable(getattr(object, method))
como ya se mencionó allí.fuente
Toma una lista como un objeto
list(filter(lambda x:callable(getattr(obj,x)),obj.__dir__()))
Usted obtiene:
fuente
Si bien "es más fácil pedir perdón que permiso " es sin duda la forma pitónica, lo que estás buscando quizás:
fuente
Para buscar un método específico en un módulo completo
fuente
Si, por ejemplo, usa shell plus, puede usar esto en su lugar:
de esa manera, con el '??' justo después de su objeto, le mostrará todos los atributos / métodos que tiene la clase.
fuente