Mediante el módulo inspect podemos de una forma sencilla obtener todos los símbolos (funciones, variables, classes, etc) de un módulo. Para ello debemos usar la función inspect.getmembers que nos devuelve todos los símbolos del módulo.
Una vez de que disponemos del símbolo podemos usar las funciones ismodule, isfunction, ismethod y similares para clasificar el símbolo.
El siguiente ejemplo podemos ver cómo se obtienen todas las clases y todas las funciones de un módulo:
Ejemplo introspección con inspect
Esta técnica se usa por ejemplo en el boscli-oss-core para una vez cargado un módulo de forma dinámica identificar todas las funciones cuyo nombre cumple un formato concreto (https://github.com/eferro/boscli-oss-core/blob/master/src/boscli/boscli.py#L515).
Eduardo Ferro Aldama (eferro) personal blog... Expanding my comfort zone. Agile mindset. Software Developer #Python #Go #FLOSS #agile #extremeprogramming https://github.com/eferro https://linktr.ee/eferro Development, Agile, Software Crafter, and random tech and nontech stuff. Opinions are my own.
Wednesday, November 14, 2012
Tuesday, November 06, 2012
Ejemplo uso importlib carga dinámica de módulos por nombre
En muchas ocasiones es bastante útil poder cargar módulos o acceder a símbolos usando como entrada una cadena. Esto permite cargar de forma dinámica código, por ejemplo si estamos desarrollando un sistema de plugins.
En versiones de python anteriores a la 2.7 se solía usar la función __import__, pero a partir de la 2.7, tenemos disponible el módulo importlib que recubre la función __import__ dándonos un api algo más elegante.
Podemos ver un ejemplo de uso en el siguiente snippet de código: https://gist.github.com/3928018
Importer Class (importlib wrapper)
Tests for importer module
Espero que este pequeño ejemplo de código le puesa ser útil a alguien...
En versiones de python anteriores a la 2.7 se solía usar la función __import__, pero a partir de la 2.7, tenemos disponible el módulo importlib que recubre la función __import__ dándonos un api algo más elegante.
Podemos ver un ejemplo de uso en el siguiente snippet de código: https://gist.github.com/3928018
Importer Class (importlib wrapper)
Tests for importer module
Espero que este pequeño ejemplo de código le puesa ser útil a alguien...
Subscribe to:
Posts (Atom)