2009-04-28 16 views
16

Estoy explorando una enorme clase de Python heredada que tiene muchos métodos. Finalmente rompo los complejos en pedazos más pequeños, por lo que la cantidad de métodos aumenta aún más. Me pregunto si hay una herramienta que pueda escanear el código de Python y construir algún tipo de diagrama de dependencia para sus métodos.Herramienta de Python que crea un diagrama de dependencia para los métodos de una clase

I definen método x() ser una dependencia del método y() si x() se llama al menos una vez en y().

Podría utilizar una herramienta para aislar (si es posible) subconjuntos de métodos de clase que no tienen dependencias externas (todas sus dependencias son métodos del mismo subconjunto).

Estoy planeando mover algunas funcionalidades a otras clases y creo que ese enfoque me ayudaría a decidir qué partes extraer de la enorme clase inicial.

Editar: Realmente me gustaría una herramienta de línea de comandos.

+2

si tiene pruebas unitarias para la clase que podría usar pycallgraph pycallgraph.slowchop.com – jfs

+0

pycallgraph is great. El único inconveniente es que obtengo gráficos monstruosos. Mi solución probablemente creará gráficos más pequeños para las sub porciones del programa mientras se ejecutan. Afortunadamente para mí, mi programa tiene algunas fases distintas de ejecución que los gráficos separados tienen sentido. –

Respuesta

1

¿Has probado pydev? Es una extensión de Python para eclipse. Creo que le permite usar la función "jerarquía de llamadas" de Eclipse para ver un gráfico de llamadas para un método determinado. No es exactamente lo que quieres, pero tal vez es suficiente para comenzar.

+1

Estoy usando vim y un par de herramientas de línea de comandos para la codificación, pero gracias por la sugerencia. Sería genial si pudieras sugerir cómo llegar a esa característica en Eclipse/pydev, porque me asustan los IDE enormes con millones de funciones :(¿Tengo que crear un proyecto, agregar archivos fuente, etc. o sería suficiente para abrir un archivo .py en Eclipse/pydev e inspeccionarlo utilizando la característica sugerida haciendo clic en algún lugar en el menú de Eclipse? Gracias de antemano – Anonymous

+1

@sk: Sí? Por favor díganos cómo. –

4

¿Ya has visto Snakefood? Parece que es exactamente lo que estás buscando.

+3

Lo he probado, pero funciona en un conjunto de archivos. Tengo solo un archivo de módulo que contiene una gran clase con muchos métodos. He intentado ejecutar snakefold en modo detallado con ese archivo y no muestra ninguna dependencia entre los métodos de clase. – Anonymous

0

yo también estaba confundido en esta pregunta, he encontrado un ayudante de búsqueda que me ayuda a encontrar la jerarquía de llamadas de otra manera. no muy bueno, pero mejor que donot have. perdón por mi inglés.

ps.IDE Eclipse + pydev

Cuestiones relacionadas