Programacion orientada a objetos python   manuel casado martín - universidad de salamanca 2003
Upcoming SlideShare
Loading in...5
×
 

Programacion orientada a objetos python manuel casado martín - universidad de salamanca 2003

on

  • 1,803 views

 

Statistics

Views

Total Views
1,803
Views on SlideShare
1,778
Embed Views
25

Actions

Likes
0
Downloads
50
Comments
0

1 Embed 25

http://mariojavier79.wordpress.com 25

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Programacion orientada a objetos python   manuel casado martín - universidad de salamanca 2003 Programacion orientada a objetos python manuel casado martín - universidad de salamanca 2003 Document Transcript

  • Programación Orientada a Objetos mayo, 2003El lenguaje de programación Python Manuel Casado Martín Santiago Guadalajara Pérez Departamento de Informática y Automática Universidad de Salamanca
  • Información de los autores:Manuel Casado Martín macamart@terra.esSantiago Guadalajara Pérez darksnt@hotmail.comEste documento puede ser libremente distribuido.© 2003 Departamento de Informática y Automática - Universidad de Salamanca.
  • ResumenEste documento pretende ser una introducción a las características generales del lenguaje, comola sintaxis o el modelo objetos. Aunque este documento no sea un tutorial, proporciona la suficiente información paraayudar a auto-orientarse a los posibles futuros programadores de Python.PYTHON i
  • AbstractThis document intends to be an introduction to the general features of the language, like syntaxor the object model. Although this document is not a tutorial, it provides enough information to help prospectivePython programmers orient themselves.ii ¡Error! No se encuentra el origen de la referencia.
  • Tabla de Contenidos1. Una visión general ______1 1.1. Un poco de historia _______ 1 1.2. ¿Qué es Python? 12. El lenguaje de programación Python 2 2.1. Sintaxis 2 2.2. Funciones 4 2.3. Tipos de datos 5 2.4. Módulos 7 2.5. Errores y excepciones 83. Python como lenguaje orientado a objetos ______10 3.1. Clases 10 3.2. Herencia 144. Usando Python 15 4.1. Python como lenguaje de scripts 165. Conclusiones 196. Referencias 19Índice de Figuras1. Ejemplo de herencia____________________________________________________15PYTHON iii
  • 1. Una visión general de Python 1.1 Un poco de historia El lenguaje de programación Python fue creado a principios de 1990 por Guido vanRossum en Holanda como sucesor de un lenguaje anterior llamado ABC. En 1995 Guidocontinuó trabajando en Python en el CNRI (Corporación internacional para la búsqueda deiniciativas) en Reston, Virginia. Durante esta época lanzó varias versiones del lenguaje. A finales del año 2000 el equipo de Python se trasladó a Zope Corporation y un añodespués se formó PSF (Python Software Fundation), siendo Zope Corporation su principalpatrocinador. Todas las versiones de Python son Open Source. Además, la mayoría de las versiones dePython que han sido liberadas desde su creación también han tenido licencia GPL (las únicas sinlicencia GPL son la 1.6, 2.0, 1.6.1 y 2.1). La última versión del lenguaje es la 2.2.1 y está en continuo desarrollo (aproximadamentecada seis meses se publica una nueva versión). 1.2 ¿Qué es Python? Python es un lenguaje de programación interpretado orientado a objetos de muy alto nivel.Sus estructuras de datos de alto nivel, combinadas con tipado dinámico y ligadura dinámica lohacen especialmente atractivo para el desarrollo de aplicaciones rápidas, así como lenguaje descripts o medio de conexión de otros componentes ya existentes. Además, la claridad y sencillez de su sintaxis mejora notablemente la legibilidad de losprogramas escritos en Python y por lo tanto reduce el coste de mantenimiento del software. Python soporta además módulos y paquetes, lo que incrementa la modularidad y lareutilización de código. Permite incorporar rutinas compiladas en C para realizar funcionescríticas a alta velocidad. También implementa estructuras de datos muy avanzadas (lista, tuplas,diccionarios) que pueden ser combinadas para crear otras estructuras más complejas. Su intérprete y la librería de Python están disponibles para las principales plataformas(Linux, Windows, UNIX...) en código fuente o binario y pueden ser distribuidas libremente.Asimismo, Python se caracteriza por disponer de una excelente documentación y una de lasmejores guías de aprendizaje. Python está escrito en C. Existe una implementación del lenguaje Python implementadaúnicamente en Java: Jython. La mayoría de las librerías del Python estándar han sido yaportadas a Jython, sin embargo el desarrollo de Python es tan rápido que los desarrolladores deJython 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 ejecutandirectamente a partir del código fuente. Para ejecutar el código de este lenguaje es necesario un intérprete, que va recibiendo líneasde código y las traducirá a lenguaje máquina para que se ejecuten. A diferencia de los lenguajescompilados no se produce código ejecutable, de modo que para ejecutar el código en diferentesplataformas solo hay que cambiar el intérprete, no el código. -1-
  • El lenguaje de programación Python El hecho de ser un lenguaje interpretado hace que Python sea, a priori, más lento que loslenguajes compilados. Sin embargo, dado que Python se suele utilizar en programas cortos, lasdiferencias al final no resultan muy significativas. Además, si necesitamos velocidad yeficiencia en una determinada rutina podemos implementarla en C e importarla a nuestrocódigo. 2. El lenguaje de programación Python Las posibilidades que ofrece este lenguaje como lenguaje de programación son muyamplias y completas. Esta es una pequeña introducción a las características más destacables. 2.1. Sintaxis Uno de los rasgos más importantes de Python es la claridad de su sintaxis. Se debe tener encuenta que Python es un lenguaje de programación muy cercano al pseudo-código. De hechollega a ser considerado como pseudo-código ejecutable. La sintaxis de Python es realmente sencilla. No hay palabras reservadas para iniciar ofinalizar bloques ni programas, no es necesario declarar variables... Ejemplo código en Python: # Ejemplo opcion = “salir” if opcion == “salir”: print “Ha decidido salir” valor = 1 print “saliendo...” Para definir bloques de código se usa solamente la tabulación, sin llaves ni begin/end. En elejemplo, el código print “Ha decidido salir” valor = 1 constituiría un bloque, que se ejecutará en caso de que la variable opcion contenga lacadena salir. El hecho de usar la tabulación para marcar el inicio y fin de un bloque hace que Pythonpresente siempre y obligatoriamente una estructura muy ordenada. Las líneas que comiencen por # son comentarios y el intérprete hace caso omiso de ellas. 2.2 Estructuras de control 2.2.1. Sentencia while El bucle while funciona de manera similar a otros lenguajes:PYTHON 2
  • 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 también muy similar a otros lenguajes: if nota >= 5: print “Aprobado” else: print “Suspenso” Tanto en Python como en C, 0 es falso y lo demás es cierto. Se usa como negación 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 Pythonla sentencia for debe ir seguida por una lista o tupla. Se dispone de la instrucción range para generar un conjunto de valores desde 0 hasta elvalor que fijemos o entre dos valores que queramos. for x in range(3): print x La salida sería: 0 1 23 PYTHON
  • El lenguaje de programación Python En este otro ejemplo: numero = 10 secuencia = [1,2,’Salamanca’,’Avila’,numero] for x in secuencia: print x Obtendríamos la salida 1 2 Salamanca Avila 10 2.3 Funciones Las funciones se definen con la palabra reservada def seguida del identificador de lafunción y entre paréntesis los parámetros sin especificar el tipo. Ejemplo: def mi_funcion(x): print “Digo”,x mi_funcion(‘Hola’) La salida sería: Digo Hola En Python todos los parámetros se pasan por referencia. Tiene la posibilidad de pasarargumentos con nombre, argumentos por omisión o manejar un número de argumentos variablepara una función. 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 4
  • 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. Lasfunciones devuelven por defecto el valor None. Para devolver un valor determinado se empleala 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 sería 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 documentación”, que soncadenas de texto que se colocan en la línea siguiente a la definición de la función. Sirven paraaclarar que hace la función y son muy útiles cuando trabajamos sobre código que ha escrito otroprogramador. 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 atención tres tipos de datos complejos que Python implementadirectamente. Estos son las listas, tuplas y diccionarios5 PYTHON
  • El lenguaje de programación Python 2.4.1 Listas El tipo de datos más versátil e interesante en Python son las listas. Las listas en Python seescriben como un conjunto de valores entre corchetes separados por comas. Estos valores notienen por que ser del mimo tipo: >>> a = [hola, adios, 100, 1234] >>> a [hola, adios, 100, 1234] Existen numerosas funciones implementadas que permiten fácilmente insertar un elementoen la lista, extraerlo, concatenar listas, etc. Gracias a estos métodos es muy sencillo utilizar unalista 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 6
  • 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 función pop() con el argumento 0 2.4.2 TuplasLas tuplas son similares a las listas, salvo que en este caso no son mutables, no se puedenmodificar sus elementos:>>> tupla = (1,4324,233.45,hola)>>> tupla[1] = nooooTraceback (most recent call last): File "<stdin>", line 1, in ?TypeError: object doesnt support item assignment 2.4.3 DiccionariosLos diccionarios o memorias asociativas son pares clave-valor donde clave puede ser cualquierobjeto 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 Módulos Un módulo en Python es un fichero con extensión .py que contiene definiciones eimplementaciones de funciones. Existe en Python un gran conjunto de módulos, cada uno de ellos especializado en uncampo de aplicación determinado. Precisamente, una de las razones por las que Python es unlenguaje potente y extremadamente útil es por la gran colección de módulos con que sedistribuye. Cualquier programador de Python puede crear sus propios módulos añadiendo asífunciones que simplifican la programación en un ámbito cualquiera y poniéndolas a disposiciónde otros programadores.7 PYTHON
  • El lenguaje de programación Python Estos módulos pueden ser importados dentro de otros módulos o dentro del móduloprincipal. Las sentencias import ... from permiten a un módulo hacer referencia a objetos delespacio de nombres de otro módulo, con la diferencia de que from Matematicas import integral añade integral al espacio de nombres del módulo actual como una referencia al objetoexterno en cuestión mientras que import Matematicas importa el módulo Matemáticas permitiendo hacer referencia a cualquier objeto delespacio de nombres de Matemáticas, como por ejemplo Matemáticas.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 erróneo en el intérprete, este señala lo sucedido marcando elerror, el nombre del fichero y el número de línea del que procede el error (los dos últimos, si laentrada viene de un fichero). while 1 print ’Hola mundo’ ^ SyntaxError: invalid syntax 2.6.2 Excepciones Aunque una expresión sea sintácticamente correcta, puede originar un error al intentarejecutarla, a este tipo de error que se produce durante la ejecución se le llama excepción, que noimplican la destrucción de la aplicación y se pueden gestionar en Python. Una excepción es dela 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 incorporala distribución del lenguaje se enumeran las excepciones internas y sus respectivos significados.PYTHON 8
  • Casado y Guadalajara Las excepciones se pueden gestionar dentro de un programa, como muestra el ejemplo:>>> while 1:... try:... x = int(raw_input("Introduzca un numero: "))... break... except ValueError:... print "El valor introducido no es un numero valido"... Primero se ejecuta la cláusula try. Si no se produce ningún error la cláusula except essaltada. Si se produce un error que corresponde con el tipo de error que indica alguna sentenciaexcept, se ejecuta su código (en este caso, si el tipo de error fuese ValueError, seimprimiría “EL valor introducido no es un numero valido”). Se puede usar la cláusula except omitiendo el nombre de la excepción para hacerla depropósito general:import string, systry: 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 mostraríael mensaje "Unexpected error:". Existe también la posibilidad de forzar excepciones o de crear excepciones definidas por elusuario. 3. Python como lenguaje orientado a objetos9 PYTHON
  • El lenguaje de programación Python 3.1 ClasesLas clases en Python no ponen una barrera absoluta entre la definición y el usuario, sino quemás bien se fían de la buena educación del programador para no invadir la definición. Elmecanismo de herencia soporta la herencia múltiple, los métodos pueden ser redefinidos en lasclases derivadas y un método puede llamar a otro del mismo nombre de una clase base. Losobjetos pueden contener una cantidad arbitraria de atributos. Como se diría en C++ todos losmiembros de una clase son públicos y todas las funciones método son virtuales. No hayconstructores ni destructores. En Python todo son objetos, lo que implica que una clase (comoun tipo de datos) es en si misma un objeto. Esto proporciona la semántica de importar yrenombrar. Es posible redefinir los operadores internos con sintaxis especial. Normalmente se define objeto como una instancia de una clase, pero en Python estadefinición 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 semántica común,descrita adecuadamente mediante la palabra “objeto”. Los objetos tienen individualidad y en Python se pueden asignar varios nombres a un mismo objeto (“generación 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 también se elimina el tener que traspasar parámetros mediante dos mecanismos). 3.1.1 Ámbitos y espacios nominales:Un espacio nominal es una correspondencia entre nombres y objetos. Ejemplos de espaciosnominales: - Conjunto de nombres internos (funciones y excepciones internas). - Los nombres globales de un módulo. - Los nombres locales dentro de una llamada a función. En cierto sentido, los atributos de un objeto también forman un espacio nominal. No hayninguna relación entre los nombres de dos espacios nominales distintos. Los espacios nominales se crean en diferentes momentos y tienen tiempos de vidadiferentes. El espacio nominal que contiene los nombres internos se crea al arrancar el intérpretede Python y no se borra nunca. El espacio nominal de un módulo se crea al leer la definición delmódulo y normalmente duran hasta que se sale del intérprete. El espacio nominal local de unafunción se crea al llamar a la función, y se borra cuando se sale de la misma, mediante unasentencia return, o bien mediante alguna excepción que la función no captura. Un ámbito es una región textual de un programa Python donde el espacio nominal esdirectamente accesible, es decir, los nombres que encuentra una referencia sin calificar (sinpuntos). Aunque los ámbitos se determinan estáticamente, se usan dinámicamente. En cualquierpunto de la ejecución existen tres ámbitos anidados (accesibles directamente): el interior(nombres locales), el medio (nombres globales del módulo) y el externo (nombres internos). Un asunto especial de Python es que las asignaciones siempre van en el ámbito másinterno, no copian datos, simplemente asignan nombres a objetos. Lo mismo es válido para losborrados. Las operaciones que introducen nombres nuevos utilizan el ámbito local, y se puede utilizarla sentencia global para indicar que la variable reside en el ámbito global.PYTHON 10
  • Casado y Guadalajara 3.1.2 Sintaxis: La forma más fácil 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” (correspondenciaentre nombres y objetos) que se utiliza como ámbito local. Para que la definición de una clase tenga efecto tiene que ejecutarse, esto implica que seaválido introducir una definición de una clase dentro de una sentencia “if” o similar. En un primer momento las sentencias dentro de una clase deberían ser funciones, aunque esposible poner cualquier otro tipo de sentencia, lo que puede resultar en algunos casos muy útil. Cuando se abandona una definición de clase de manera normal (se ejecuta la última líneade su código), se crea un objeto de clase. Es, sencillamente, un envoltorio del contenido delespacio nominal creado por la definición de la clase. El ámbito local original (el que estabaactivo cuando se entró en la definición de clase) se reinstancia y el objeto clase se enlaza con elnombre de clase dado en la cabecera de la función (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 sintaxisestándar de Python (obj.nombre). Los nombres de atributos válidos son todos los nombresque estaban en el espacio nominal de la clase cuando fue creada la clase. 2.- Instanciación de una clase: para instanciar una clase se sigue la notación de funciones,es decir, es suficiente con imaginar que la es una llamada a una función que no tiene parámetrosy que devuelve una instancia nueva de la clase. Así, para la definición de la clase: class MiClase: i = 12345 def f(x): return hola, mundo MiClase.i y MiClase.f serían referencias a atributos válidas, que devuelven unentero y un objeto método, respectivamente. Con la sentencia x = MiClase () se crea una nueva instancia de la clase y se la asignaa la variable local “x”. Esta operación genera un objeto vacío. Para asignarle un estado inicialconocido se puede definir un método especial llamado __init__(). Cuando se crea una claseque define un método __init__() al instanciar un objeto de la clase se llamaautomáticamente al método __init__().11 PYTHON
  • El lenguaje de programación Python El método __init__() puede recibir parámetros, lo que añade una gran cantidad deposibilidades. Estos parámetros los recibirá de los argumentos proporcionados al operador deinstanciación 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 enPython no hace falta declarar, sino que aparecen cuando se les asigna por primera vez un valor.Conviene recordar que estos atributos son siempre “públicos”, como se diría en C++ y que estarea del programador no romper y mantener el encapsulado. 2.- Métodos: un método es una función que “pertenece a” un objeto. 3.1.5 Objetos método:Normalmente se llama a un método de forma inmediata (obj.método()) pero es posible nohacerlo. obj.método es un objeto método y se puede almacenar para recuperar más tarde. Lo que tienen de especial los métodos es que el objeto que los llama se pasa como primerargumento de la función. En general, llamar a un método con una lista de argumentos esequivalente a llamar a la función correspondiente con la lista de argumentos resultante deinsertar el objeto del método 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, sebusca en su clase. Si el nombre denota un atributo de clase válido que resulta ser un objetofunción, se crea un objeto método empaquetando juntos (punteros hacia) el objeto instancia y elobjeto función recién encontrado en un objeto abstracto: el objeto método. Cuando se llama alobjeto método con una lista de argumentos, se desempaqueta de nuevo, se construye una nuevalista de argumentos a partir del objeto instancia y la lista de argumentos original y se llama alobjeto función 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 método con el mismonombre, para evitar estos conflictos nominales que son difíciles de detectar conviene usar unpatrón a la hora de escoger los nombres para los atributos y lo métodos. Por ejemplo empezarlos atributos con un guión bajo y los métodos con una letra mayúscula, o algo similar.PYTHON 12
  • Casado y Guadalajara Tanto los métodos como los usuarios de un objeto pueden acceder a los atributos delobjeto, puesto que todos los atributos y métodos son ‘públicos’, es decir, no se puedeimplementar 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 puedenintroducir nuevos atributos de datos propios a una instancia de un objeto, y si no se elige unnombre acertado o coherente puede haber conflictos nominales o incluso afectar al buenfuncionamiento de un método. Por convención, el primer parámetro que recibe un método se suele denominar self, yaunque no es obligatorio ayuda a que el código pueda ser más legible por otros programadores,incluso no es extraño que pueda haber navegadores de clases que supongan que se sigue estanotación. Cualquier objeto función que es atributo de una clase define un método para las instanciasde esa clase, aunque no es necesario que la implementación de esa función este encerrada en ladefinición de la clase, es decir, asignar un objeto función a una variable local de una clase esválido, por ejemplo: # Función 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 función, por loque los tres son métodos de las instancias de la clase C. Los métodos pueden llamar a otros métodos utilizando los atributos métodos del argumentoself. 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 métodos pueden hacer referencia a las variables globales del mismo modo que lo hacenlas funciones. Aunque es raro encontrar un buen motivo para que un método use una variable13 PYTHON
  • El lenguaje de programación Pythonglobal, hay casos en los que es legítimo el uso del ámbito global, es decir, los métodos puedenutilizar las funciones y los módulos importados al ámbito global. Normalmente, la clase quecontiene al método esta definida en este ámbito global. 3.2 HerenciaPython a diferencia de otros lenguajes soporta los dos tipos de herencia, simple y múltiple: Herencia simple: es el tipo de herencia en el cuál la clase derivada solo hereda lascaracterísticas de una clase base. La sintaxis de definición 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 ladefinición de la clase derivada. En lugar de una clase base también se permite una expresión,que suele resultar útil cuando la clase base está definida en otro módulo. La ejecución de la definición de la ejecución de la clase derivada se lleva acabo del mismomodo que en la clase base. Cuando se construye un objeto de la clase derivada se recuerda laclase base. Esto se utiliza para resolver referencias a atributos: si no se encuentra el atributosolicitado 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 métodos se resuelve buscando el atributo enla clase correspondiente, descendiendo por la cadena de clases base (si es necesario). Las clases derivadas pueden redefinir los métodos, si es necesario, de sus clases base (escomo si todas las funciones fueran virtuales en C++). También se permite que se amplíe unmétodo, sin remplazarlo por completo, de la siguiente forma:nombreClaseBase.nombreMétodo(self, argumentos). Herencia múltiple: La clase derivada recibe las características de más de una clase base. Lasintaxis de definición 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 semántica es la regla de resolución utilizada paralas referencias a los atributos de la clase. Se busca primero en profundidad y luego de izquierdaa derecha. Así pues, primero se busca en la clase derivada, sino se encuentra en la clase Base1y sus clases base, sino en la clase Base2 y sus clases base y así sucesivamente. Parece más natural buscar primero en Base1 y luego en Base2 antes de entrar a examinarlas clases base de Base1, pero esta forma exigiría conocer si un atributo particular de Base1esta realmente definido en Base1 o en sus clases base, pudiendo originar conflictos de nombrescon la Base2. Como Python no diferencia se recibe los atributos de una clase base de formadirecta o heredados, no se genera este problema. Un ejemplo es el de la figura: A B def f() C D def f() (nueva definición) EFigura 1 – Ejemplo de herencia E es clase derivada de las clases base C y D, por lo que en E esta definido el método f.Si desde una instancia de E se ejecutará el método f, la implementación que realmente seejecutaría sería la de B, porque primero buscaría en C, que es derivada de B pero no tiene laimplementación de f, luego buscaría en B (y no en D), y como tiene la definición de f noseguiría buscando. Si se quisiera usar el método de la clase D, habría que indicarlo de la maneraD.f() De esto se puede deducir en una instancia de una clase derivada que hereda de dos clasesbase que tienen una clase base común, solo tendrá una copia de los atributos y métodos de laclase base común. 4. Usando Python Cuando se desarrolla un script para la shell de un sistema operativo, se comprueba queconforme aumenta la complejidad, aumenta enormemente el tamaño del mismo y se hace másdifícil de entender, más lento...15 PYTHON
  • El lenguaje de programación Python Otra situación que puede resultar familiar es el desarrollo de un programa que requiere eluso de numerosas librerías y donde el común ciclo escritura/compilación/prueba/re-compilaciónes demasiado lento y se necesita desarrollar software más rápidamente. En ambos casos Python es el lenguaje ideal de programación. Permite desarrollar softwaremás rápidamente, más sencillo y de menor tamaño ya que: - Los tipos de datos de alto nivel permiten expresar operaciones complejas en una sola sentencia - No se necesita la declaración de variables - Los bloques de código se identifican por el tabulado Se puede partir un programa en módulos que pueden emplearse en el desarrollo de otrosprogramas. Igualmente Python incorpora un conjunto de módulos básicos como de I/O,llamadas al sistema, shockets, interfaz gráfica de usuario... Además es extensible, de manera que es posible incorporar funciones o módulos de otroslenguajes que puedan resultar más eficientes en una determinada situación. Python puede ser usado como lenguaje de scripts, para la administración de sistemas, comogenerador de código (especialmente en el ámbito de desarrollo web), para el desarrollo deinterfaces gráficas 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 programación completo que soporta scripts, pero es mucho más queeso. Aún así es en este campo donde mayor implantación tiene Python y probablemente dondemayor eficacia presta. Pero ¿qué es un script? Un script es un conjunto de instrucciones que se ejecutan paso apaso, instrucción a instrucción. Están especialmente indicados para pequeños programas que necesiten interactuar demanera más o menos fluida con el Sistema Operativo. Los lenguajes de scripts se conocen con el nombre de middleware ya que son capaces degestionar transferencias de datos entre aplicaciones o entre aplicaciones y el SO. Habitualmentese pueden ampliar mediante plugins o módulos (en el caso de Python) e incluso pueden serempotrados en otras aplicaciones. Ejemplo: script que realiza la búsqueda 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 programación 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 dinámico, la ligadura tardía, la gran cantidad de módulos de Python y lasimplicidad de su sintaxis hacen que los programas escritos con este lenguaje sean realmentecortos y rápidos de desarrollar, aunque el rendimiento baja bastante cuando el programa es unpoco extenso. La gran cantidad de módulos y librerías de las que dispone hacen que el ámbito deutilización de Python sea muy extenso, abarcando desde gestión de sistemas y proyectos webhasta interfaces gráficas de usuario, sin olvidarse de los scripts. Python es usado por grandes compañías como: Google, HP, IBM y Red Hat. Ejemplo deutilización Python: un trabajo con muchos módulos o ficheros distintos, y al final de cada día sequiere hacer una copia de seguridad en un disquete de todos ellos, en vez de estar copiándolos amano, o hacer un programa en C, o C++ (que puede ser un trabajo tedioso), lo mejor es hacer unpequeño programa escrito en Python. 6. Referencias [1] La pagina oficial de Python: http://www.python.org [2] Noticias sobre Python: http://www.pythonware.com/daily/index.htm [3] Completa documentación de Python en español: http://usuarios.lycos.es/arturosa/index.html [4] Documentación de Python en español de sourceforge: http://sourceforge.net/projects/pyspanishdoc [5] Informes interesantes sobre programación (herencia múltiple): http://www.informit.com/index.asp?session_id={4C573D38-B34A-4B1B-95A1- A04A8129E780} [6] Pagina de Zope Corporation: http://www.zope.com [7] Interesante artículo general sobre Python: http://www.networkcomputing.com [8] Eckel, Bruce “Thinking in Python, Design Patters and Problem Solving Techniques” [9] Andrés Marzal “Introducción a la programación en Python” [10] Pilgrim, Marck. “Dive into Python”19 PYTHON