# `pyclbr` — Soporte para navegador de módulos Python

Código fuente: Lib/pyclbr.py

El módulo `pyclbr` proporciona información limitada sobre las funciones, clases y métodos definidos en un módulo de Python. La información es suficiente para implementar un navegador de módulos. La información se extrae del código fuente de Python en lugar de importar el módulo, por lo que este módulo es seguro de usar con código que no es de confianza. Esta restricción hace que sea imposible utilizar este módulo con módulos no implementados en Python, incluidos todos los módulos de extensión estándar y opcionales.

`pyclbr.``readmodule`(module, path=None)

  Retorna un diccionario que asigna nombres de clase a nivel de módulo con descriptores de clase. Si es posible, se incluyen descriptores para las clases base importadas. El parámetro module es una cadena con el nombre del módulo que se va a leer; puede ser el nombre de un módulo dentro de un paquete. Si se indica, path es una secuencia de rutas de directorios antepuesto a `sys.path`, que se utiliza para localizar el código fuente del módulo.

  Esta función es la interfaz original y sólo se mantiene por compatibilidad. Retorna una versión filtrada de lo siguiente.

`pyclbr.``readmodule_ex`(module, path=None)

  Retorna un árbol basado en diccionarios que contiene un descriptor de función o clase para cada función y clase definida en el módulo con una instrucción `def` o `class`. El diccionario retornado asigna nombres de clase y función a nivel de módulo con sus descriptores. Los objetos anidados se introducen en el diccionario hijo de su elemento padre. Al igual que con readmodule, module nombra el módulo que se va a leer y path se antepone a sys.path. Si el módulo que se lee es un paquete, el diccionario retornado tiene una clave `'__path__'` cuyo valor es una lista que contiene la ruta del paquete.

Nuevo en la versión 3.7: Descriptores para definiciones anidadas. Se accede a ellos a través del nuevo atributo children. Cada uno tiene un nuevo atributo parent.

Los descriptores retornados por estas funciones son instancias de las clases Function y Class. No se espera que los usuarios creen instancias de estas clases.

## Objetos Function

Las instancias de la clase `Function` describen funciones definidas por instrucciones def. Tienen los siguientes atributos:

`Function.``file`

  Nombre del archivo en el cual la función está definida.

`Function.``module`

  El nombre del módulo que define la función descrita.

`Function.``name`

  El nombre de la función.

`Function.``lineno`

  El número de línea el en archivo donde inicia la definición.

`Function.``parent`

  Para funciones en el nivel más alto, None. Para funciones anidadas, el padre.

  Nuevo en la versión 3.7.

`Function.``children`

  Un diccionario asignando nombres con descriptores para las clases y funciones anidadas.

  Nuevo en la versión 3.7.

`Function.``is_async`

  `True` para funciones que están definidas con el prefijo `async`, de otra manera `False`.

  Nuevo en la versión 3.10.

## Objetos Class

Las instancias de las clase `Class` describen clases definidas por instrucciones class. Tienen los mismos atributos que Functions y dos más.

`Class.``file`

  Nombre del archivo en el que la clase está definida.

`Class.``module`

  Nombre del módulo que define la clase descrita.

`Class.``name`

  El nombre de la clase.

`Class.``lineno`

  El número de línea el en archivo donde inicia la definición.

`Class.``parent`

  Para clases en el nivel más alto, None. Para clases anidadas, el padre.

  Nuevo en la versión 3.7.

`Class.``children`

  Un diccionario asignando nombres con descriptores para las clases y funciones anidadas.

  Nuevo en la versión 3.7.

`Class.``super`

  Una lista de objetos `Class` que describen las clases base inmediatas de la clase que se está describiendo. Las clases que se denominan superclases pero que no son detectables por `readmodule_ex()` se enumeran como una cadena con el nombre de clase en lugar de objetos `Class`.

`Class.``methods`

  Un diccionario asignando los nombres de los métodos a sus números de línea. Esto se puede derivar del reciente diccionario children, pero permanece por compatibilidad.