Está en la página 1de 25

Programacin Orientada a Objetos mayo, 2003

El lenguaje de programacin Python


Manuel Casado Martn Santiago Guadalajara Prez

Departamento de Informtica y Automtica Universidad de Salamanca

Informacin de los autores: Manuel Casado Martn macamart@terra.es Santiago Guadalajara Prez darksnt@hotmail.com

Este documento puede ser libremente distribuido. 2003 Departamento de Informtica y Automtica - Universidad de Salamanca.

Resumen
Este documento pretende ser una introduccin a las caractersticas generales del lenguaje, como la sintaxis o el modelo objetos. Aunque este documento no sea un tutorial, proporciona la suficiente informacin para ayudar a auto-orientarse a los posibles futuros programadores de Python.

PYTHON

Abstract
This document intends to be an introduction to the general features of the language, like syntax or the object model. Although this document is not a tutorial, it provides enough information to help prospective Python programmers orient themselves.

ii

Error! No se encuentra el origen de la referencia.

Tabla de Contenidos
1. Una visin general 1.1. Un poco de historia 1.2. Qu es Python? 2. El lenguaje de programacin Python 2.1. Sintaxis 2.2. Funciones 2.3. Tipos de datos 2.4. Mdulos 2.5. Errores y excepciones 3. Python como lenguaje orientado a objetos 3.1. Clases 3.2. Herencia 4. 5. 6. Usando Python 4.1. Python como lenguaje de scripts Conclusiones Referencias ______1 _______ 1 1 2 2 4 5 7 8 ______10 10 14 15 16 19 19

ndice de Figuras
1. Ejemplo de herencia____________________________________________________15

PYTHON

iii

1.
1.1

Una visin general de Python


Un poco de historia

El lenguaje de programacin Python fue creado a principios de 1990 por Guido van Rossum en Holanda como sucesor de un lenguaje anterior llamado ABC. En 1995 Guido continu trabajando en Python en el CNRI (Corporacin internacional para la bsqueda de iniciativas) en Reston, Virginia. Durante esta poca lanz varias versiones del lenguaje. A finales del ao 2000 el equipo de Python se traslad a Zope Corporation y un ao despus se form PSF (Python Software Fundation), siendo Zope Corporation su principal patrocinador. Todas las versiones de Python son Open Source. Adems, la mayora de las versiones de Python que han sido liberadas desde su creacin tambin han tenido licencia GPL (las nicas sin licencia GPL son la 1.6, 2.0, 1.6.1 y 2.1). La ltima versin del lenguaje es la 2.2.1 y est en continuo desarrollo (aproximadamente cada seis meses se publica una nueva versin). 1.2 Qu es Python?

Python es un lenguaje de programacin interpretado orientado a objetos de muy alto nivel. Sus estructuras de datos de alto nivel, combinadas con tipado dinmico y ligadura dinmica lo hacen especialmente atractivo para el desarrollo de aplicaciones rpidas, as como lenguaje de scripts o medio de conexin de otros componentes ya existentes. Adems, la claridad y sencillez de su sintaxis mejora notablemente la legibilidad de los programas escritos en Python y por lo tanto reduce el coste de mantenimiento del software. Python soporta adems mdulos y paquetes, lo que incrementa la modularidad y la reutilizacin de cdigo. Permite incorporar rutinas compiladas en C para realizar funciones crticas a alta velocidad. Tambin implementa estructuras de datos muy avanzadas (lista, tuplas, diccionarios) que pueden ser combinadas para crear otras estructuras ms complejas. Su intrprete y la librera de Python estn disponibles para las principales plataformas (Linux, Windows, UNIX...) en cdigo fuente o binario y pueden ser distribuidas libremente. Asimismo, Python se caracteriza por disponer de una excelente documentacin y una de las mejores guas de aprendizaje. Python est escrito en C. Existe una implementacin del lenguaje Python implementada nicamente en Java: Jython. La mayora de las libreras del Python estndar han sido ya portadas a Jython, sin embargo el desarrollo de Python es tan rpido que los desarrolladores de Jython tienen problemas para portar todas las innovaciones. 1.2.1 Python es un lenguaje interpretado

Se entiende por lenguaje interpretado aquel lenguaje cuyas instrucciones se ejecutan directamente a partir del cdigo fuente. Para ejecutar el cdigo de este lenguaje es necesario un intrprete, que va recibiendo lneas de cdigo y las traducir a lenguaje mquina para que se ejecuten. A diferencia de los lenguajes compilados no se produce cdigo ejecutable, de modo que para ejecutar el cdigo en diferentes plataformas solo hay que cambiar el intrprete, no el cdigo.
-1-

El lenguaje de programacin Python

El hecho de ser un lenguaje interpretado hace que Python sea, a priori, ms lento que los lenguajes compilados. Sin embargo, dado que Python se suele utilizar en programas cortos, las diferencias al final no resultan muy significativas. Adems, si necesitamos velocidad y eficiencia en una determinada rutina podemos implementarla en C e importarla a nuestro cdigo.

2. El lenguaje de programacin Python


Las posibilidades que ofrece este lenguaje como lenguaje de programacin son muy amplias y completas. Esta es una pequea introduccin a las caractersticas ms destacables. 2.1. Sintaxis Uno de los rasgos ms importantes de Python es la claridad de su sintaxis. Se debe tener en cuenta que Python es un lenguaje de programacin muy cercano al pseudo-cdigo. De hecho llega a ser considerado como pseudo-cdigo ejecutable. La sintaxis de Python es realmente sencilla. No hay palabras reservadas para iniciar o finalizar bloques ni programas, no es necesario declarar variables... Ejemplo cdigo en Python: # Ejemplo opcion = salir if opcion == salir: print Ha decidido salir valor = 1 print saliendo... Para definir bloques de cdigo se usa solamente la tabulacin, sin llaves ni begin/end. En el ejemplo, el cdigo print Ha decidido salir valor = 1 constituira un bloque, que se ejecutar en caso de que la variable opcion contenga la cadena salir. El hecho de usar la tabulacin para marcar el inicio y fin de un bloque hace que Python presente siempre y obligatoriamente una estructura muy ordenada. Las lneas que comiencen por # son comentarios y el intrprete hace caso omiso de ellas. 2.2 2.2.1. Estructuras de control Sentencia while

El bucle while funciona de manera similar a otros lenguajes:

PYTHON

Casado y Guadalajara

while i<10: print i i = i+3 Podemos incluir una sentencia else en un bucle while, que se ejecutar cuando ste finalice, a no se que hayamos salido de l con una sentencia break: while i<10: print i i = i+3 else: print i ya no es menor que 10 2.2.2. Sentencia if

El bucle if es tambin muy similar a otros lenguajes: if nota >= 5: print Aprobado else: print Suspenso Tanto en Python como en C, 0 es falso y lo dems es cierto. Se usa como negacin la palabra not. if not(x%2): return 1 2.2.3. Sentencia for

El bucle for es ligeramente diferente a como lo conocemos en otros lenguajes. En Python la sentencia for debe ir seguida por una lista o tupla. Se dispone de la instruccin range para generar un conjunto de valores desde 0 hasta el valor que fijemos o entre dos valores que queramos. for x in range(3): print x La salida sera: 0 1 2

PYTHON

El lenguaje de programacin Python

En este otro ejemplo: numero = 10 secuencia = [1,2,Salamanca,Avila,numero] for x in secuencia: print x Obtendramos la salida 1 2 Salamanca Avila 10 2.3 Funciones

Las funciones se definen con la palabra reservada def seguida del identificador de la funcin y entre parntesis los parmetros sin especificar el tipo. Ejemplo: def mi_funcion(x): print Digo,x mi_funcion(Hola) La salida sera: Digo Hola En Python todos los parmetros se pasan por referencia. Tiene la posibilidad de pasar argumentos con nombre, argumentos por omisin o manejar un nmero de argumentos variable para una funcin. Otra cosa que lo hace peculiar es el hecho de poder tratar las funciones como valores. As se pueden hacer cosas como:

def mi_funcion(x): print "Digo",x decir = mi_funcion decir("Que tal")

PYTHON

Casado y Guadalajara

decir(10) Cuya salida es: Digo Que tal Digo 10 Al igual que en C, en Python no se distingue entre funciones y procedimientos. Las funciones devuelven por defecto el valor None. Para devolver un valor determinado se emplea la sentencia return. def mi_funcion(x): argumento = x return 0 valor = mi_funcion(10) print "La funcion 'mi_funcion' devuelve el valor:",valor Cuya salida sera La funcion 'mi_funcion' devuelve el valor: 0 Todo en Python son objetos, incluso las funciones. Un atributo especialmente interesante es __doc__. En este atributo se almacenan las llamadas cadenas de documentacin, que son cadenas de texto que se colocan en la lnea siguiente a la definicin de la funcin. Sirven para aclarar que hace la funcin y son muy tiles cuando trabajamos sobre cdigo que ha escrito otro programador. Un ejemplo muy simple: def cuad(x): Devuelve el cuadrado del valor pasado como argumento return x*x print cuad.__doc__ Cuya salida es Devuelve el cuadrado del valor pasado como argumento 2.4 Tipos de datos

Merecen especialmente atencin tres tipos de datos complejos que Python implementa directamente. Estos son las listas, tuplas y diccionarios

PYTHON

El lenguaje de programacin Python

2.4.1

Listas

El tipo de datos ms verstil e interesante en Python son las listas. Las listas en Python se escriben como un conjunto de valores entre corchetes separados por comas. Estos valores no tienen por que ser del mimo tipo: >>> a = ['hola', 'adios', 100, 1234] >>> a ['hola', 'adios', 100, 1234] Existen numerosas funciones implementadas que permiten fcilmente insertar un elemento en la lista, extraerlo, concatenar listas, etc. Gracias a estos mtodos es muy sencillo utilizar una lista como pila...: >>> stack = [3, 4, 5] >>> stack.append(6) >>> stack.append(7) >>> stack [3, 4, 5, 6, 7] >>> stack.pop() 7 >>> stack [3, 4, 5, 6] >>> stack.pop() 6 >>> stack.pop() 5 >>> stack [3, 4] o como cola: >>> queue = ["Luis", "Daniel", "Lucia"] >>> queue.append("Miguel") >>> queue.append("Elena") >>> queue.pop(0) 'Luis' >>> queue.pop(0)

PYTHON

Casado y Guadalajara

'Daniel' >>> queue ['Lucia', 'Miguel', 'Elena'] En este caso, para extraer un elemento del principio de la cola ser necesario llamar a la funcin pop() con el argumento 0 2.4.2 Tuplas

Las tuplas son similares a las listas, salvo que en este caso no son mutables, no se pueden modificar sus elementos: >>> tupla = (1,4324,233.45,'hola') >>> tupla[1] = 'noooo' Traceback (most recent call last):
File "<stdin>", line 1, in ? TypeError: object doesn't support item assignment

2.4.3

Diccionarios

Los diccionarios o memorias asociativas son pares clave-valor donde clave puede ser cualquier objeto no mutable. Las claves han de ser nicas dentro de un diccionario. Ejemplo:
>>> telefono = {'maria':3331234,'luis':5551235} >>> telefono {'luis': 5551235, 'maria': 3331234} >>> telefono['maria'] 3331234 >>> telefono.keys() ['luis', 'maria'] >>> telefono.has_key('maria') 1 >>> telefono.has_key('alberto')

0 2.5 Mdulos

Un mdulo en Python es un fichero con extensin .py que contiene definiciones e implementaciones de funciones. Existe en Python un gran conjunto de mdulos, cada uno de ellos especializado en un campo de aplicacin determinado. Precisamente, una de las razones por las que Python es un lenguaje potente y extremadamente til es por la gran coleccin de mdulos con que se distribuye. Cualquier programador de Python puede crear sus propios mdulos aadiendo as funciones que simplifican la programacin en un mbito cualquiera y ponindolas a disposicin de otros programadores.

PYTHON

El lenguaje de programacin Python

Estos mdulos pueden ser importados dentro de otros mdulos o dentro del mdulo principal. Las sentencias import ... from permiten a un mdulo hacer referencia a objetos del espacio de nombres de otro mdulo, con la diferencia de que from Matematicas import integral aade integral al espacio de nombres del mdulo actual como una referencia al objeto externo en cuestin mientras que import Matematicas importa el mdulo Matemticas permitiendo hacer referencia a cualquier objeto del espacio de nombres de Matemticas, como por ejemplo Matemticas.integral 2.6 Errores y excepciones

Se pueden distinguir en Python dos tipos de errores: errores de sintaxis y excepciones. 2.6.1 Errores de sintaxis

Se producen al escribir algo errneo en el intrprete, este seala lo sucedido marcando el error, el nombre del fichero y el nmero de lnea del que procede el error (los dos ltimos, si la entrada viene de un fichero). while 1 print Hola mundo ^ SyntaxError: invalid syntax

2.6.2

Excepciones

Aunque una expresin sea sintcticamente correcta, puede originar un error al intentar ejecutarla, a este tipo de error que se produce durante la ejecucin se le llama excepcin, que no implican la destruccin de la aplicacin y se pueden gestionar en Python. Una excepcin es de la forma: >>> 10 * (1/0) Traceback (innermost last): File "<stdin>", line 1 ZeroDivisionError: integer division or modulo Las excepciones pueden ser de diversos tipos. En la biblioteca de referencia que incorpora la distribucin del lenguaje se enumeran las excepciones internas y sus respectivos significados.

PYTHON

Casado y Guadalajara

Las excepciones se pueden gestionar dentro de un programa, como muestra el ejemplo: >>> while 1: ... ... ... ... ... ... Primero se ejecuta la clusula try. Si no se produce ningn error la clusula except es saltada. Si se produce un error que corresponde con el tipo de error que indica alguna sentencia except, se ejecuta su cdigo (en este caso, si el tipo de error fuese ValueError, se imprimira EL valor introducido no es un numero valido). Se puede usar la clusula except omitiendo el nombre de la excepcin para hacerla de propsito general: import string, sys try: f = open('myfile.txt') s = f.readline() i = int(string.strip(s)) except IOError, (errno, strerror): print "I/O error(%s): %s" % (errno, strerror) except ValueError: print "Could not convert data to an integer." except: print "Unexpected error:", sys.exc_info()[0] raise En el ejemplo, si no se produce un error de entrada/salida ni un error de valor, se mostrara el mensaje "Unexpected error:". Existe tambin la posibilidad de forzar excepciones o de crear excepciones definidas por el usuario. try: x = int(raw_input("Introduzca un numero: ")) break except ValueError: print "El valor introducido no es un numero valido"

3.

Python como lenguaje orientado a objetos

PYTHON

El lenguaje de programacin Python

3.1

Clases

Las clases en Python no ponen una barrera absoluta entre la definicin y el usuario, sino que ms bien se fan de la buena educacin del programador para no invadir la definicin. El mecanismo de herencia soporta la herencia mltiple, los mtodos pueden ser redefinidos en las clases derivadas y un mtodo puede llamar a otro del mismo nombre de una clase base. Los objetos pueden contener una cantidad arbitraria de atributos. Como se dira en C++ todos los miembros de una clase son pblicos y todas las funciones mtodo son virtuales. No hay constructores ni destructores. En Python todo son objetos, lo que implica que una clase (como un tipo de datos) es en si misma un objeto. Esto proporciona la semntica de importar y renombrar. Es posible redefinir los operadores internos con sintaxis especial. Normalmente se define objeto como una instancia de una clase, pero en Python esta definicin no es correcta, ya que en hay tipos de datos que no son clases (enteros, listas, ficheros...), sin embargo, todos los tipos de Python comparten algo de semntica comn, descrita adecuadamente mediante la palabra objeto. Los objetos tienen individualidad y en Python se pueden asignar varios nombres a un mismo objeto (generacin de alias, que en algunos aspectos se parecen a los punteros), que cuando el objeto es inmutable no es importante, pero cuando el objeto es mutable y se cambia su estado, se acceda con el nombre que se acceda el objeto esta actualizado (de esta forma tambin se elimina el tener que traspasar parmetros mediante dos mecanismos). 3.1.1 mbitos y espacios nominales:

Un espacio nominal es una correspondencia entre nombres y objetos. Ejemplos de espacios nominales: Conjunto de nombres internos (funciones y excepciones internas). Los nombres globales de un mdulo. Los nombres locales dentro de una llamada a funcin.

En cierto sentido, los atributos de un objeto tambin forman un espacio nominal. No hay ninguna relacin entre los nombres de dos espacios nominales distintos. Los espacios nominales se crean en diferentes momentos y tienen tiempos de vida diferentes. El espacio nominal que contiene los nombres internos se crea al arrancar el intrprete de Python y no se borra nunca. El espacio nominal de un mdulo se crea al leer la definicin del mdulo y normalmente duran hasta que se sale del intrprete. El espacio nominal local de una funcin se crea al llamar a la funcin, y se borra cuando se sale de la misma, mediante una sentencia return, o bien mediante alguna excepcin que la funcin no captura. Un mbito es una regin textual de un programa Python donde el espacio nominal es directamente accesible, es decir, los nombres que encuentra una referencia sin calificar (sin puntos). Aunque los mbitos se determinan estticamente, se usan dinmicamente. En cualquier punto de la ejecucin existen tres mbitos anidados (accesibles directamente): el interior (nombres locales), el medio (nombres globales del mdulo) y el externo (nombres internos). Un asunto especial de Python es que las asignaciones siempre van en el mbito ms interno, no copian datos, simplemente asignan nombres a objetos. Lo mismo es vlido para los borrados. Las operaciones que introducen nombres nuevos utilizan el mbito local, y se puede utilizar la sentencia global para indicar que la variable reside en el mbito global.

PYTHON

10

Casado y Guadalajara

3.1.2

Sintaxis:

La forma ms fcil de definir una clase es de la forma: class nombreClase: <sentencia-1> . . . <sentencia-N> Cuando se crea una clase nueva, se genera un nuevo espacio nominal (correspondencia entre nombres y objetos) que se utiliza como mbito local. Para que la definicin de una clase tenga efecto tiene que ejecutarse, esto implica que sea vlido introducir una definicin de una clase dentro de una sentencia if o similar. En un primer momento las sentencias dentro de una clase deberan ser funciones, aunque es posible poner cualquier otro tipo de sentencia, lo que puede resultar en algunos casos muy til. Cuando se abandona una definicin de clase de manera normal (se ejecuta la ltima lnea de su cdigo), se crea un objeto de clase. Es, sencillamente, un envoltorio del contenido del espacio nominal creado por la definicin de la clase. El mbito local original (el que estaba activo cuando se entr en la definicin de clase) se reinstancia y el objeto clase se enlaza con el nombre de clase dado en la cabecera de la funcin (en el ejemplo nombreClase). 3.1.3 Objetos clase:

Los objetos en Python soportan dos tipos de operaciones: 1.- Referencias a atributos: para acceder a un atributo de un objeto se sigue la sintaxis estndar de Python (obj.nombre). Los nombres de atributos vlidos son todos los nombres que estaban en el espacio nominal de la clase cuando fue creada la clase. 2.- Instanciacin de una clase: para instanciar una clase se sigue la notacin de funciones, es decir, es suficiente con imaginar que la es una llamada a una funcin que no tiene parmetros y que devuelve una instancia nueva de la clase. As, para la definicin de la clase: class MiClase: i = 12345 def f(x): return 'hola, mundo' MiClase.i y MiClase.f seran referencias a atributos vlidas, que devuelven un entero y un objeto mtodo, respectivamente. Con la sentencia x = MiClase () se crea una nueva instancia de la clase y se la asigna a la variable local x. Esta operacin genera un objeto vaco. Para asignarle un estado inicial conocido se puede definir un mtodo especial llamado __init__(). Cuando se crea una clase que define un mtodo __init__() al instanciar un objeto de la clase se llama automticamente al mtodo __init__().

11

PYTHON

El lenguaje de programacin Python

El mtodo __init__() puede recibir parmetros, lo que aade una gran cantidad de posibilidades. Estos parmetros los recibir de los argumentos proporcionados al operador de instanciacin de la clase, por ejemplo: class Complejo: def __init__(self, parteReal, parteImaginaria): self.r = parteReal self.i = parteImaginaria x = Complejo(3.0,-4.5) 3.1.4 Objetos instancia:

Los objetos instancias poseen: 1.- Atributos de datos: son aquellos que se denominan miembros dato en C++ y que en Python no hace falta declarar, sino que aparecen cuando se les asigna por primera vez un valor. Conviene recordar que estos atributos son siempre pblicos, como se dira en C++ y que es tarea del programador no romper y mantener el encapsulado. 2.- Mtodos: un mtodo es una funcin que pertenece a un objeto. 3.1.5 Objetos mtodo:

Normalmente se llama a un mtodo de forma inmediata (obj.mtodo()) pero es posible no hacerlo. obj.mtodo es un objeto mtodo y se puede almacenar para recuperar ms tarde. Lo que tienen de especial los mtodos es que el objeto que los llama se pasa como primer argumento de la funcin. En general, llamar a un mtodo con una lista de argumentos es equivalente a llamar a la funcin correspondiente con la lista de argumentos resultante de insertar el objeto del mtodo al principio de la lista de argumentos original. Cuando se hace referencia a un atributo de una instancia que no es un atributo de datos, se busca en su clase. Si el nombre denota un atributo de clase vlido que resulta ser un objeto funcin, se crea un objeto mtodo empaquetando juntos (punteros hacia) el objeto instancia y el objeto funcin recin encontrado en un objeto abstracto: el objeto mtodo. Cuando se llama al objeto mtodo con una lista de argumentos, se desempaqueta de nuevo, se construye una nueva lista de argumentos a partir del objeto instancia y la lista de argumentos original y se llama al objeto funcin con la nueva lista de argumentos. Ejemplo: xf = x.f while 1: print xf() Los atributos de datos se tienen en cuenta en lugar de los atributos mtodo con el mismo nombre, para evitar estos conflictos nominales que son difciles de detectar conviene usar un patrn a la hora de escoger los nombres para los atributos y lo mtodos. Por ejemplo empezar los atributos con un guin bajo y los mtodos con una letra mayscula, o algo similar.

PYTHON

12

Casado y Guadalajara

Tanto los mtodos como los usuarios de un objeto pueden acceder a los atributos del objeto, puesto que todos los atributos y mtodos son pblicos, es decir, no se puede implementar un tipo de datos abstracto puro. En Python no es posible ocultar los atributos, todo se basa en convenciones y en la buena disciplina del programador. Los clientes deben utilizar los atributos de datos con sumo cuidado, ya que pueden introducir nuevos atributos de datos propios a una instancia de un objeto, y si no se elige un nombre acertado o coherente puede haber conflictos nominales o incluso afectar al buen funcionamiento de un mtodo. Por convencin, el primer parmetro que recibe un mtodo se suele denominar self, y aunque no es obligatorio ayuda a que el cdigo pueda ser ms legible por otros programadores, incluso no es extrao que pueda haber navegadores de clases que supongan que se sigue esta notacin. Cualquier objeto funcin que es atributo de una clase define un mtodo para las instancias de esa clase, aunque no es necesario que la implementacin de esa funcin este encerrada en la definicin de la clase, es decir, asignar un objeto funcin a una variable local de una clase es vlido, por ejemplo: # Funcin definida fuera de la clase def f1(self, x, y): return min(x, x+y) class C: f = f1 def g(self): return hola, mundo h = g Ahora f, g y h son atributos de la clase C, que hacen referencia a objetos funcin, por lo que los tres son mtodos de las instancias de la clase C. Los mtodos pueden llamar a otros mtodos utilizando los atributos mtodos del argumento self. Por ejemplo: class Bolsa: def __init__(self): self.datos = [] def agregar(self, x): self.datos.append(x) def agregarDosVeces(self, x): self.add(x) self.add(x) Los mtodos pueden hacer referencia a las variables globales del mismo modo que lo hacen las funciones. Aunque es raro encontrar un buen motivo para que un mtodo use una variable

13

PYTHON

El lenguaje de programacin Python

global, hay casos en los que es legtimo el uso del mbito global, es decir, los mtodos pueden utilizar las funciones y los mdulos importados al mbito global. Normalmente, la clase que contiene al mtodo esta definida en este mbito global. 3.2 Herencia

Python a diferencia de otros lenguajes soporta los dos tipos de herencia, simple y mltiple: Herencia simple: es el tipo de herencia en el cul la clase derivada solo hereda las caractersticas de una clase base. La sintaxis de definicin de una clase derivada es de la forma: class nombreClaseDerivada(nombreClaseBase): <sentencia-1> . . . <sentencia-N> El nombre nombreClaseBase debe estar definido en un mbito que contenga la definicin de la clase derivada. En lugar de una clase base tambin se permite una expresin, que suele resultar til cuando la clase base est definida en otro mdulo. La ejecucin de la definicin de la ejecucin de la clase derivada se lleva acabo del mismo modo que en la clase base. Cuando se construye un objeto de la clase derivada se recuerda la clase base. Esto se utiliza para resolver referencias a atributos: si no se encuentra el atributo solicitado en la clase derivada se busca en la clase base, y as de forma recursiva. Se puede instanciar una clase derivada de forma similar a una clase base: nombreClaseDerivada(). Las referencias a mtodos se resuelve buscando el atributo en la clase correspondiente, descendiendo por la cadena de clases base (si es necesario). Las clases derivadas pueden redefinir los mtodos, si es necesario, de sus clases base (es como si todas las funciones fueran virtuales en C++). Tambin se permite que se ample un mtodo, sin remplazarlo por completo, de la siguiente forma: nombreClaseBase.nombreMtodo(self, argumentos). Herencia mltiple: La clase derivada recibe las caractersticas de ms de una clase base. La sintaxis de definicin es de la siguiente forma:

PYTHON

14

Casado y Guadalajara

class nombreClaseDerivada(Base1, Base2, Base3): <sentencia-1> . . . <sentencia-N> La nica regla necesaria para explicar la semntica es la regla de resolucin utilizada para las referencias a los atributos de la clase. Se busca primero en profundidad y luego de izquierda a derecha. As pues, primero se busca en la clase derivada, sino se encuentra en la clase Base1 y sus clases base, sino en la clase Base2 y sus clases base y as sucesivamente. Parece ms natural buscar primero en Base1 y luego en Base2 antes de entrar a examinar las clases base de Base1, pero esta forma exigira conocer si un atributo particular de Base1 esta realmente definido en Base1 o en sus clases base, pudiendo originar conflictos de nombres con la Base2. Como Python no diferencia se recibe los atributos de una clase base de forma directa o heredados, no se genera este problema. Un ejemplo es el de la figura:

A B def f() C E Figura 1 Ejemplo de herencia E es clase derivada de las clases base C y D, por lo que en E esta definido el mtodo f. Si desde una instancia de E se ejecutar el mtodo f, la implementacin que realmente se ejecutara sera la de B, porque primero buscara en C, que es derivada de B pero no tiene la implementacin de f, luego buscara en B (y no en D), y como tiene la definicin de f no seguira buscando. Si se quisiera usar el mtodo de la clase D, habra que indicarlo de la manera D.f() De esto se puede deducir en una instancia de una clase derivada que hereda de dos clases base que tienen una clase base comn, solo tendr una copia de los atributos y mtodos de la clase base comn. D def f() (nueva definicin)

4.

Usando Python

Cuando se desarrolla un script para la shell de un sistema operativo, se comprueba que conforme aumenta la complejidad, aumenta enormemente el tamao del mismo y se hace ms difcil de entender, ms lento...

15

PYTHON

El lenguaje de programacin Python

Otra situacin que puede resultar familiar es el desarrollo de un programa que requiere el uso de numerosas libreras y donde el comn ciclo escritura/compilacin/prueba/re-compilacin es demasiado lento y se necesita desarrollar software ms rpidamente. En ambos casos Python es el lenguaje ideal de programacin. Permite desarrollar software ms rpidamente, ms sencillo y de menor tamao ya que: Los tipos de datos de alto nivel permiten expresar operaciones complejas en una sola sentencia No se necesita la declaracin de variables Los bloques de cdigo se identifican por el tabulado

Se puede partir un programa en mdulos que pueden emplearse en el desarrollo de otros programas. Igualmente Python incorpora un conjunto de mdulos bsicos como de I/O, llamadas al sistema, shockets, interfaz grfica de usuario... Adems es extensible, de manera que es posible incorporar funciones o mdulos de otros lenguajes que puedan resultar ms eficientes en una determinada situacin. Python puede ser usado como lenguaje de scripts, para la administracin de sistemas, como generador de cdigo (especialmente en el mbito de desarrollo web), para el desarrollo de interfaces grficas de usuario o cualquier otra tarea computacional. 4.1 Python como lenguaje de scripts A menudo Python suele ser definido como lenguaje de scripts, lo cual es un error. Python es un lenguaje de programacin completo que soporta scripts, pero es mucho ms que eso. An as es en este campo donde mayor implantacin tiene Python y probablemente donde mayor eficacia presta. Pero qu es un script? Un script es un conjunto de instrucciones que se ejecutan paso a paso, instruccin a instruccin. Estn especialmente indicados para pequeos programas que necesiten interactuar de manera ms o menos fluida con el Sistema Operativo. Los lenguajes de scripts se conocen con el nombre de middleware ya que son capaces de gestionar transferencias de datos entre aplicaciones o entre aplicaciones y el SO. Habitualmente se pueden ampliar mediante plugins o mdulos (en el caso de Python) e incluso pueden ser empotrados en otras aplicaciones. Ejemplo: script que realiza la bsqueda en Google y devuelve los resultados:

import httplib URL = 'www.google.com' COD_BUSQUEDA = '/search?num=100&q=' CABECERA = '<b>...</b> \n<br><font color=#008000>'

PYTHON

16

Casado y Guadalajara

FIN = ' ' NUM_RESULTADOS = 10 MAX_RESULTADOS = 50 def formateaQuery(query): from string import join a = query.split() return join(a,'+') def google(query=None,n=None): if n is None: n = NUM_RESULTADOS if query is None: print "No se ha efectuado la busqueda" return -1 busqueda = run(query,n) if busqueda == -2: print 'La busqueda para %s no ha arrojado resultados.'%(query.replace('+',' ')) return if busqueda == -1: print 'No se ha podido efectuar la conexion' return for x in busqueda: print x def run(query,n): try: conn = httplib.HTTPConnection(URL) conn.request("GET",COD_BUSQUEDA+formateaQuery(query)) r = conn.getresponse() except: print 'No se ha podido efectuar la conexion' return -1 if r.reason == 'OK': data = r.read() else:
17 PYTHON

El lenguaje de programacin Python

return -1 conn.close aux = data.split(CABECERA) #Hay que desechar el primer elemento aux.pop(0) if len(aux)==0: return -2 busqueda = [] i=0 while n!=0 and i<MAX_RESULTADOS: try: a = aux[i].split(FIN,2)[0] if a!=' ': busqueda.append('http://'+a) n-=1 except: pass i+=1 return busqueda Ahora lo ejecutamos: >>> google("salamanca",10) http://www.readysoft.es/home/cisalamanca/salamanca/ http://www.cyberspain.com/ciudades-patrimonio/isalaman.htm http://www.cyberspain.com/ciudades-patrimonio/esalaman.htm http://www.salamancaciudad.com/ http://www3.usal.es/~sabus/bibliotecas/pagprincipalbib.htm http://www3.usal.es/~farmacia/ http://www.elperiodico.es/salamanca/ http://www.salamancawireless.net/ http://www.arteguias.com/mudejar_salamanca.htm http://www.guiasalamanca.com/

PYTHON

18

Casado y Guadalajara

5.

Conclusiones

El tipado dinmico, la ligadura tarda, la gran cantidad de mdulos de Python y la simplicidad de su sintaxis hacen que los programas escritos con este lenguaje sean realmente cortos y rpidos de desarrollar, aunque el rendimiento baja bastante cuando el programa es un poco extenso. La gran cantidad de mdulos y libreras de las que dispone hacen que el mbito de utilizacin de Python sea muy extenso, abarcando desde gestin de sistemas y proyectos web hasta interfaces grficas de usuario, sin olvidarse de los scripts. Python es usado por grandes compaas como: Google, HP, IBM y Red Hat. Ejemplo de utilizacin Python: un trabajo con muchos mdulos o ficheros distintos, y al final de cada da se quiere hacer una copia de seguridad en un disquete de todos ellos, en vez de estar copindolos a mano, o hacer un programa en C, o C++ (que puede ser un trabajo tedioso), lo mejor es hacer un pequeo programa escrito en Python.

6. Referencias
[1] [2] [3] [4] [5]

La pagina oficial de Python: http://www.python.org Noticias sobre Python: http://www.pythonware.com/daily/index.htm Completa documentacin de Python en espaol: http://usuarios.lycos.es/arturosa/index.html Documentacin de Python en espaol de sourceforge: http://sourceforge.net/projects/pyspanishdoc Informes interesantes sobre programacin (herencia mltiple): http://www.informit.com/index.asp?session_id={4C573D38-B34A-4B1B-95A1A04A8129E780} Pagina de Zope Corporation: http://www.zope.com Interesante artculo general sobre Python: http://www.networkcomputing.com Eckel, Bruce Thinking in Python, Design Patters and Problem Solving Techniques Andrs Marzal Introduccin a la programacin en Python Pilgrim, Marck. Dive into Python

[6] [7] [8] [9] [10]

19

PYTHON

También podría gustarte