5.2   Usando una clase

El siguiente paso es definir una clase que llamaremos buffer. Esto representa mejoras respecto a nuestro ejemplo anterior, porque ahora podremos escribir el texto HTML a un archivo desde el programa sin redireccionar la salida estándar. Esto nos permite generar más de una página simultáneamente.

La clase buffer crea un atributo text en cada instancia que es el texto HTML que se va formando. El método add() se usa para agregar texto a la instancia, mientras que el método pop() es para regresar y vaciar el atributo de texto, como cuando lo vamos a escribir a un archivo.

La clase tiene también métodos con los mismos nombres que las funciones básicas. Estos métodos simplemente llaman a la función correspondiente y van agregando el texto regresado mediante el método add().

class buffer: 
    """Clase para generar objetos que almacenan codigo HTML 
    que despues sera escrito a algun archivo.""" 
 
    def __init__( self ): 
        "Constructor, crea el atributo de texto." 
        self.text = '' 
 
    def add( self, texto ): 
        "Agrega texto arbitrario al buffer." 
        self.text = self.text + texto 
 
    def pop( self ): 
        "Regresa el texto del buffer, y borra el buffer." 
        temp = self.text 
        self.text = '' 
        return temp 
 
    def inicio( self, titulo ): 
        "Inicia el documento HTML." 
        self.add( inicio( titulo ) ) 
 
    def encabezado( self, nivel, string): 
        "Regresa string con encabezado o título HTML, default es H1." 
        self.add( encabezado( nivel, string ) ) 
 
    def horizontal( self ): 
        "Línea horizontal en el documento HTML." 
        self.add( horizontal() ) 
 
    def destino( self, clave, texto ): 
        "Regresa texto como destino." 
        self.add( destino( clave, texto) ) 
 
    def liga( self, url, texto): 
        "Liga o hipervínculo a url con texto." 
        self.add( liga( url, texto) ) 
 
    def parrafo( self, texto ): 
        "Genera un párrafo con texto." 
        self.add( parrafo( texto) ) 
 
    def saltolinea( self ): 
        "Genera un salto de línea." 
        self.add( saltolinea() ) 
 
    def tabla( self, arreglo ): 
        "Inserta arreglo en una tabla HTML." 
        self.add( tabla( arreglo ) ) 
 
    def final( self ): 
        "Fin del documento HTML." 
        self.add( final() )

Ahora vemos un ejemplo de cómo usamos esta clase para crear páginas HTML. Creamos dos instancias de buffer, les agregamos contenido y finalmente escribimos cada buffer a un archivo. Cada página lleva un enlace a la otra:

import html 
 
# Crear dos instancias de la clase buffer: 
 
pagina1 = html.buffer() 
pagina2 = html.buffer() 
 
# Llenar cara buffer: 
 
pagina1.inicio( 'Página 1' ) 
pagina1.encabezado( '2', 'Esta es página 1') 
pagina1.liga( 'pag2.html', 'Ir a página 2' ) 
pagina1.final() 
 
pagina2.inicio( 'Página 2' ) 
pagina2.encabezado( '2', 'Esta es Página 2') 
pagina2.liga( 'pag1.html', 'Ir a página 1' ) 
pagina2.final() 
 
# Vaciar cada buffer a un archivo: 
 
fp = open( 'pag1.html', 'w' ) 
fp.write( pagina1.pop() ) 
fp = open( 'pag2.html', 'w' ) 
fp.write( pagina2.pop() )

interfase-gr-fica-de-usuario [0]6   Interfase gráfica de usuariointerfase-gr-fica-de-usuario