pyclbr — Navegador de clases¶
Propósito: | Implementa una interfaz de programación adecuada para su uso en un editor de código fuente para crear un navegador de clase. |
---|
pyclbr
puede escanear el código fuente Python para encontrar clases y
funciones independientes. La información sobre los nombres de clase, métodos y
funciones y los números de línea se recopilan usando tokenize
sin
importar el código.
Los ejemplos en esta sección usan el siguiente archivo fuente como entrada.
"""Example source for pyclbr.
"""
class Base:
"""This is the base class.
"""
def method1(self):
return
class Sub1(Base):
"""This is the first subclass.
"""
class Sub2(Base):
"""This is the second subclass.
"""
class Mixin:
"""A mixin class.
"""
def method2(self):
return
class MixinUser(Sub2, Mixin):
"""Overrides method1 and method2
"""
def method1(self):
return
def method2(self):
return
def method3(self):
return
def my_function():
"""Stand-alone function.
"""
return
Escaneo de clases¶
Hay dos funciones públicas expuestas por pyclbr
. La primera,
readmodule()
, toma el nombre del módulo como argumento devuelve un mapa de
nombres de clase a objetos de Class
que contienen los metadatos sobre el
origen de la clase.
import pyclbr
import os
from operator import itemgetter
def show_class(name, class_data):
print('Class:', name)
filename = os.path.basename(class_data.file)
print(' File: {0} [{1}]'.format(
filename, class_data.lineno))
show_super_classes(name, class_data)
show_methods(name, class_data)
print()
def show_methods(class_name, class_data):
for name, lineno in sorted(class_data.methods.items(),
key=itemgetter(1)):
print(' Method: {0} [{1}]'.format(name, lineno))
def show_super_classes(name, class_data):
super_class_names = []
for super_class in class_data.super:
if super_class == 'object':
continue
if isinstance(super_class, str):
super_class_names.append(super_class)
else:
super_class_names.append(super_class.name)
if super_class_names:
print(' Super classes:', super_class_names)
example_data = pyclbr.readmodule('pyclbr_example')
for name, class_data in sorted(example_data.items(),
key=lambda x: x[1].lineno):
show_class(name, class_data)
Los metadatos para la clase incluyen el archivo y el número de línea donde se define, así como los nombres de las superclases. Los métodos de la clase se guardan como un mapa entre el nombre del método y el número de línea. El resultado muestra las clases y métodos enumerados en orden según su número de línea en el archivo fuente.
$ python3 pyclbr_readmodule.py
Class: Base
File: pyclbr_example.py [11]
Method: method1 [15]
Class: Sub1
File: pyclbr_example.py [19]
Super classes: ['Base']
Class: Sub2
File: pyclbr_example.py [24]
Super classes: ['Base']
Class: Mixin
File: pyclbr_example.py [29]
Method: method2 [33]
Class: MixinUser
File: pyclbr_example.py [37]
Super classes: ['Sub2', 'Mixin']
Method: method1 [41]
Method: method2 [44]
Method: method3 [47]
Escaneo de funciones¶
La otra función pública en pyclbr
es readmodule_ex()
. Hace todo lo que
readmodule()
hace y agrega funciones al conjunto de resultados.
import pyclbr
import os
from operator import itemgetter
example_data = pyclbr.readmodule_ex('pyclbr_example')
for name, data in sorted(example_data.items(),
key=lambda x: x[1].lineno):
if isinstance(data, pyclbr.Function):
print('Function: {0} [{1}]'.format(name, data.lineno))
Cada objeto Function
tiene propiedades muy parecidas al objeto Clase
.
$ python3 pyclbr_readmodule_ex.py
Function: my_function [51]
Ver también
- Documentación de la biblioteca estándar para pyclbr
inspect
– El móduloinspect
puede descubrir más metadatos sobre clases y funciones, pero requiere importar el código.tokenize
– El módulotokenize
analiza el código fuente Python en tokens.