"pyclbr" --- Suporte a navegador de módulos do Python
*****************************************************

**Código-fonte:** Lib/pyclbr.py

======================================================================

O módulo "pyclbr" fornece informações limitadas sobre as funções,
classes e métodos definidos em um módulo codificado em Python. As
informações são suficientes para implementar um navegador de módulos.
As informações são extraídas do código-fonte do Python em vez de
importar o módulo, portanto, este módulo é seguro para uso com código
não confiável. Essa restrição torna impossível o uso deste módulo com
módulos não implementados no Python, incluindo todos os módulos de
extensão padrão e opcionais.

pyclbr.readmodule(module, path=None)

   Retorna um dicionário que mapeia os nomes de classe no nível do
   módulo aos descritores de classe. Se possível, descritores para
   classes base importadas estão incluídos. O parâmetro *module* é uma
   string com o nome do módulo a ser lido; pode ser o nome de um
   módulo dentro de um pacote. Se fornecido, *path* é uma sequência de
   caminhos de diretório anexada a "sys.path", que é usada para
   localizar o código-fonte do módulo.

   Esta função é a interface original e é mantida apenas para
   compatibilidade reversa. Ela retorna uma versão filtrada da
   seguinte.

pyclbr.readmodule_ex(module, path=None)

   Retorna uma árvore baseada em dicionário que contém uma função ou
   descritores de classe para cada função e classe definida no módulo
   com uma instrução "def" ou "class". O dicionário retornado mapeia
   os nomes das funções e das classes no nível do módulo para seus
   descritores. Objetos aninhados são inseridos no dicionário filho de
   seus pais. Como em readmodule, *module* nomeia o módulo a ser lido
   e *path* é anexado ao sys.path. Se o módulo que está sendo lido for
   um pacote, o dicionário retornado terá uma chave "'__path__'" cujo
   valor é uma lista que contém o caminho de pesquisa do pacote.

Novo na versão 3.7: Descritores para definições aninhadas. Eles são
acessados através do novo atributo filho. Cada um tem um novo atributo
pai.

Os descritores retornados por essas funções são instâncias das classes
Function e Class. Não se espera que os usuários criem instâncias
dessas classes.


Objetos Function
================

Instâncias da classe "Function" descrevem funções definidas por
instruções def. Elas têm os seguintes atributos:

Function.file

   Nome do arquivo no qual a função está definida.

Function.module

   O nome do módulo que define a função descrita.

Function.name

   O nome da função.

Function.lineno

   O número da linha no arquivo em que a definição é iniciada.

Function.parent

   Para funções de nível superior, None. Para funções aninhadas, o
   pai.

   Novo na versão 3.7.

Function.children

   Um dicionário que mapeia nomes para descritores para funções e
   classes aninhadas.

   Novo na versão 3.7.

Function.is_async

   "True" para funções que são definidas com o prefixo "async". Caso
   contrário, "False".

   Novo na versão 3.10.


Objetos classe
==============

Instâncias da classe "Class" descrevem classes definidas por
instruções class. Elas têm os mesmos atributos que Functions e mais
dois.

Class.file

   Nome do arquivo no qual a classe está definida.

Class.module

   O nome do módulo que define a classe descrita.

Class.name

   O nome da classe.

Class.lineno

   O número da linha no arquivo em que a definição é iniciada.

Class.parent

   Para classes de nível superior, None. Para classes aninhadas, o
   pai.

   Novo na versão 3.7.

Class.children

   Um dicionário que mapeia nomes para descritores para funções e
   classes aninhadas.

   Novo na versão 3.7.

Class.super

   Uma lista de objetos "Class" que descreve as classes base imediatas
   da classe que está sendo descrita. Classes nomeadas como
   superclasses, mas que não podem ser descobertas por
   "readmodule_ex()" são listadas como uma string com o nome da classe
   em vez de como objetos de "Class".

Class.methods

   Um dicionário que mapeia nomes de métodos para números de linha.
   Isso pode ser derivado do dicionário filho mais novo, mas permanece
   para compatibilidade retroativa.
