Anda di halaman 1dari 59

APUNTES SOBRE PYTHON

(Versin 0.8)
Medelln/Colombia: 30/septiembre/2014

Autor
DEIMER OZUNA VIDAL

Contactar al correo
deimerov@outlook.com

Usted es libre de:


Compartir - copiar, distribuir, ejecutar y comunicar pblicamente la obra o hacer obras
derivadas

Bajo las condiciones siguientes:


Atribucin Debe reconocer los crditos de la obra de la manera especificada por el
autor o el licenciante (pero no de una manera que sugiera que tiene su apoyo o que
apoyan el uso que hace de su obra).
No Comercial No puede utilizar esta obra para fines comerciales.

Compartir bajo la Misma Licencia Si altera o transforma esta obra, o genera una
obra derivada, slo puede distribuir la obra generada bajo una licencia idntica a sta.

This work is licensed under the Creative Commons Attribution-NonCommercial 4.0 International
License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc/4.0/ or
send a letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041,
USA.

INTRODUCCIN
Siendo sincero, casi nunca me gusta leer las introducciones de los libros me
aburro rpidamente leyndolas porque hablan de temas muy generales que
probablemente no entender y termino irrevocablemente saltndomelas. Pero ese
soy yo tal vez usted sea menos perezoso. Bueno empecemos!
Python es un lenguaje de programacin que fue creado por Guido van Rossum.
Python es un lenguaje interpretado, con tipado dinmico, fuertemente tipado,
multiplataforma y orientado a objetos.
Lenguaje interpretado
Un lenguaje interpretado se ejecuta utilizando un programa intermedio
denominado intrprete, En la ejecucin del cdigo escrito por usted el intrprete
hace las veces de traductor entre el cdigo escrito por usted y el lenguaje que
puede entender una computadora.

Tipado dinmico
Decir que Python presenta tipado dinmico quiere decir que no es necesario
declarar el tipo de dato que se le va a asignar a una determinada variable, adems
el valor al que alude dicha variable puede cambiar si usted le asigna otro tipo de
dato. Por ejemplo:

A la variable apellido se le asign el valor Ozuna, el cual es un tipo de dato


denominado cadena (string); todo esto se hizo sin la necesidad de declarar antes
que a dicha variable se le asignara tal tipo de dato. El valor de esta variable
puede cambiar si se le asigna otro valor, aunque sea de distinto tipo:

Ahora apellido pasa a tener como valor 3.14 (el cual es un tipo de dato llamado
float)

Fuertemente tipado
No es permitido operar a una variable como si fuera de un tipo distinto al que
tiene, por lo que es preciso convertir de forma explcita dicha variable al nuevo tipo
previamente:

Como se puede observar no se puede sumar un dato tipo cadena con un dato tipo
numrico (sea float, int complex). Pero si se convierte a A en un tipo de dato
numrico, es posible realizar tal operacin, como sigue a continuacin.

Multiplataforma
Python puede ser usado en: GNU/Linux, Windows, Mac OS, etc

Orientado a objetos
Los objetos, es lo primero en lo que haremos nfasis, an no es tiempo de
empezar con ellos, es ms, cuando se me presentan temas de importancia crucial
en la introduccin de un libro, lo que yo suelo hacer es saltrmelos. Pienso que es
un tema muy importante como para pretender explicarlo en 4 renglones.

HERRAMIENTA DE TRABAJO
Lo primero que debe hacer es descargar Python, puede hacerlo aqu:
https://code.google.com/p/pythonxy/
Luego, descargar la interfaz que mejor le guste a usted para Python, hay muchas
opciones, te presento algunas:
Ninja IDE
Pycharm

http://www.jetbrains.com/pycharm/
http://ninja-ide.org/

En el presente texto se usar Spyder en la versin 2.2.5. Esta es una vista de


cmo se ve Spyder:

En todo caso, yo asumo que ya tienes la herramienta de trabajopor lo que no


me adentrar en explicaciones.
Spyder, tiene integrado un editor y el intrprete. El prompt es la serie de
caracteres >>> que aparece en el intrprete. El prompt indica que el intrprete
de Python est presto a recibir rdenes, est esperando a que ingreses cdigo.
A placer puedes comenzar a jugar con el intrprete, has operaciones triviales!

OBJETOS
Tal vez ya has usado a la ligera la palabra dato, te parece lgico pensar que -20 es
un dato, que la palabra NATALIA es un dato y que obviamente -20 y NATALIA
son dos tipos de datos distintos... y tal vez intuyas que a estas cosas a las que
usted se refiere como datos se pueden someter a ciertas manipulaciones; por
ejemplo, a -20 le podras sacar su valor absoluto, o dividirlo por otro nmero etc. A
NATALIA podras agregarle otra letra o repetir la palabra las veces que quieras:
NATALIANATALIANATALIA o podras convertirla en minsculas, en fin; intuyes
que esos datos pueden someterse a ciertas manipulaciones.
Tal vez pienses que -20 y sus manipulaciones son cosas que se almacenan de
forma independiente, es decir, que -20 es una cosa y sus manipulaciones son otra
cosa.
Bien aqu viene el cambio de paradigma
Resulta que esos datos a los que desde este momento vas a llamar atributos y
esas manipulaciones a las que se pueden someter esos datos las vas a llamar
mtodos, y que esos atributos y esos mtodos conforman un nico ente, a ese
nico ente se le denominar: Objeto.

Precisemos entonces qu es un objeto:


Un objeto es una entidad dotada de atributos que se puede someter a ciertas
manipulaciones. En Python a todas esas manipulaciones a las que se puede
someter un objeto se le llamar: Mtodos, pero hay que tener muy presente
que en Python un objeto contiene atributos y mtodos, es decir, atributos y
mtodos forman un slo ente: El objeto.
Obviamente usted no se extraar que los atributos (datos) se puedan someter a
sus mtodos (manipulaciones), lo que cambia en Python es que esas dos cosas
estn ligadas conformando una sola cosa: El objeto
Tal vez te parezca que soy insistente con esto, pero es muy importante que desde
ya vayas pensando que cuando veas en Python al nmero -20 ya sepas que ese
-20 contiene sus atributos y sus manipulaciones, es ms, no lo llames el nmero
20; llmalo mejor el objeto -20.

Y as ser cuando quieras crear un nuevo tipo de objeto (lo que hasta no hace
mucho usted considerara; crear un nuevo tipo de datos que responda a ciertas
manipulaciones), bien cuando usted quiera crear un nuevo tipo de objeto en
Python, tendr que dotarlo de atributos y programar sus mtodos y esas dos
cosas (atributos y mtodos) estarn encapsuladas por decirlo as, en cada objeto
que usted cree.
Veamos a continuacin algunos atributos y mtodos que contiene el objeto -20 en
Python:
Objeto -20 en Python
Propiedades

Mtodos

denominator Este atributo alude al


denominador del objeto
-20

__abs__

Este mtodo obtiene el


valor absoluto de -20

numerator

Este atributo alude al


numerador del objeto
-20

__add__

Este mtodo le suma


un nmero a -20

real

Este mtodo encuentra


__divmod__ el cociente y el residuo
Este atributo alude a la
de la divisin de -20
parte real del objeto -20
(como dividendo) con
otro
nmero
como
divisor

imag

Esta atributo alude a la


parte imaginaria del
objeto -20

__float__

Este mtodo transforma


a -20 en un nmero
decimal

No te preocupes si te parecen extraos esos nombres de atributos y de mtodos


del objeto -20, lo importante es que observes que aluden a cosas que ya usted
sabe y que esas cosas conforman al objeto -20.
Pues bien, los objetos numricos (sus atributos y mtodos) ya estn creados en
Python adems de otros objetos que llamaremos secuenciales (cadenas, tuplas,
listas). S que en algn punto de su estudio de Python estos objetos sern
limitados para usted, descuide, usted podr crear sus propios objetos, le dir a
Python los atributos que desea que tengan; aunado a las formas en que se deben
manipular (sus mtodos).
Ahora la pregunta del milln: Todo esto suena muy bien pero Cmo decirle a
Python que cree mis propios objetos?...estoy ansioso por empezar a crearlos!.
La respuesta del milln: Si claaaaaro, un nio que sin aprender a sumar ya

dizque est ansioso por comenzar a calcular sumas de Riemann y dizque a


resolver problemas de fsica cuntica. Usted es Albert Einstein?, si la respuesta
es NO; entonces por favor siga leyendo, si la respuesta es si; entonces pase
directamente al captulo llamado objeto-clase. Considero que primero es bueno
que te vayas familiarizando con el lenguaje Python, saber minuciosamente ciertos
detalles y despus si catapultarte a los temas de tu inters.
Pero pensndolo bien: Albert Einstein no saba programar que yo sepa...

OBJETOS BSICOS DE PYTHON


Por ahora los objetos bsicos que se trabajarn se dividen en:

Escalares
Entre stos tenemos a los objetos enteros (tipo int), a los objetos decimales (tipo
float) y a los objetos complejos (tipo complex). Si se desea saber el tipo de objetos
que se tiene, se procede as:

La siguiente forma de expresar un tipo de objeto numrico ser til saberlo:

Pueden darse ciertas conversiones de un objeto numrico a otro

Nota 1: El comando int convierte un objeto tipo float en un objeto tipo int, sin
embargo, el redondeo de int puede ser al alza o a la baja segn el ordenador en
que se ejecute, por lo que es mejor usar un comando adicional para estar
completamente seguro de que el resultado arrojado sea el deseado.

Nota 2: El comando int tambin puede transformar un objeto tipo cadena (que
slo tenga nmero entero) a un dato tipo int.

Booleanos
Python ofrece un tipo de objeto especial que permite expresar slo dos valores:
cierto y falso. El valor cierto se expresa con True y el valor falso con False. Son
los valores lgicos o booleanos. Ejemplo
A la variable resultado_comparacion se le desea asignar el resultado de la
sentencia 4>3

En realidad los booleanos son una subclase del tipo int, observa a continuacin:

Secuenciales
Un objeto escalar es un elemento nico, sin embargo, un objeto secuencial se
compone de una sucesin de elementos (nmeros, espacios en blanco, en
definitiva; cualquier conjunto de caracteres), dentro de stos se encuentran: Las
cadenas (las cadenas van entrecomilladas), las listas (van entre corchetes) y las
tuplas (van entre parntesis). Ms adelante veremos en detalle estos tipos de
objetos
Ejemplos de cadena

Natalia
2334

Ejemplo de tupla
(2.6, 5, Catalina, False, 76j, Sandra)
Ejemplo de lista

[1, 2.98, hola, 4-3j, True, vaca, 9]

OPERADORES

Operador suma: +

Lo ves? No importa el espacio entre ellos, sin embargo no se puede dejar


espacio entre el prompt y el primer nmero.

Operador resta: -

Operador divisin: /

Raz cuadrada: Devuelve la raz cuadrada de un nmero. Ejemplo

Mdulo: El operador mdulo devuelve el residuo de la divisin entera entre


dos operandos.

Exponenciacin: se denota con dos asteriscos juntos, no separados por


ningn espacio en blanco: **

Operadores de comparacin: stos arrojan los valores Booleanos True


False

OPERADOR
==
!=

<>
<
<=
>
>=

SIGNIFICADO
Es igual que
Es distinto de
Es menor que
Es menor o igual que
Es mayor que
Es mayor o igual que

Operadores lgicos o condicionales

Hay tres operadores lgicos en Python: la (y lgica) o conjuncin (and), la (o


lgica) o disyuncin (or) y el (no lgico) o negacin (not).
El operador and da como resultado el valor cierto si y slo si son ciertos sus dos
operandos.

El operador or proporciona True si cualquiera de sus operandos es verdadero, y


False slo cuando ambos operandos son falsos.

OBJETOS MUTABLES Y OBJETOS INMUTABLES


Ya enumeramos los tipos bsicos de objetos que tiene Python: int, float, complex,
cadena, lista y tupla. Pues bien, Python es capaz de almacenar en memoria a
dichos objetos cuando usted hace uso de ellos. Por ejemplo, si usted est usando
el objeto 45 Python lo almacenar en cierta zona de memoria, a lo mejor est
tambin usando el objeto hola, pues Python lo almacenar en cierta zona de
memoria; y si hace uso del objeto [4, 5, 5] pues Python lo almacenar en cierta
zona de memoria etc.

Lo nico que por ahora deseo que captes, es que de esos objetos bsicos, slo
las listas y las tuplas (en ciertos casos muy especiales) permiten modificar la
zona de memoria donde fueron almacenados dichos objetos, es decir, que si
almacenas a una lista en cierta zona de memoria; esa zona de memoria es
susceptible de cambio; a lo mejor querras agregarle un nmero a tu lista
almacenada o un caracter o eliminarle un elemento etc. Pero vuelvo y repito, slo
puede hacerle esto a las listas y a las tuplas (en ciertos casos muy especiales)
porque si almacenas al objeto hola en cierta zona de memoria; esa zona de
memoria Python la toma automticamente como inmutable; ya no podrs agregar
una letra o eliminar varias letras en esa zona de memoria etc. Lo mismo pasa
con los objetos escalares (int, float, complex) una vez almacenes al objeto 45 en
cierta zona de memoria, esa zona de memoria pasa a ser inviolable para Python.

ASIGNACIONES y GESTIN DE MEMORIA


Como bien dijimos anteriormente, Python almacena a los objetos en
memoriapero no te dijimos que si dichos objetos almacenados no se les asigna
una etiqueta (un nombre) Python los destruye apenas terminen de ser usados en
lo que sea que los ests usando, por lo que si es de nuestro inters contar con
ellos en una futura operacin, es necesario bautizar a dichos objetos.
Usted puede darle asignarle varias etiquetas a un mismo objeto. Y estas etiquetas
slo sern formas de acceder a la informacin de ese objeto almacenado en
memoria y nada ms que eso. Los objetos no le pertenecen a sus etiquetas,
tanto es as que vuelvo y repito: Un mismo objeto puede tener varias etiquetas

1. Gestin de memoria para objetos tipo int, float, complex y


cadena
Un objeto tipo int, float, complex cadena slo se guarda en memoria una nica
vez. De all en ms, lo que hace Python es hacer que las etiquetas apunten a ese
objeto almacenado. Observemos lo que pasa a continuacin:

Python hizo esto:

Es decir, el objeto 45 se guard en una zona determinada de memoria y lo que


hizo Python fue que las dems etiquetas apuntaran a dicha zona de memoria, por
lo que las etiquetas a,b,c apuntan en realidad al mismo objeto. En forma similar
Python actu con el objeto hola, por lo que las etiquetas x,w,z apuntan al mismo
objeto. No me crees?

Lo ves? Las etiquetas a,b,c apuntan a la misma zona de memoria y las


etiquetas x,w,z tambin apuntan a la misma zona de memoria

2. Gestin de memoria para los objetos Listas


El objeto tipo lista sigue una forma particular de almacenarse en memoria. Una
lista se puede o no almacenar en la misma zona de memoria.

Caso en que varias etiquetas apuntan al mismo objeto lista o al mismo objeto
tupla.

Veamos si es verdad que dichas etiquetas apuntan a la misma zona de


memoria.

Caso en que una lista se almacena en distintas zonas de memoria

En ambos casos Python almacena al objeto lista [1, 2, 3] en distintas zonas de


memoria.
Es muy importante que tengas muy presenta esta gestin de memoria para los
objetos tipo lista y te lo explicar con un ejemplo: Ms adelante veremos que los
objetos tipo lista contienen un mtodo llamado append() que permite agregarle al
final de la lista un nuevo valor.
Ensayemos el primer caso en que las etiquetas apunten al mismo objeto

Qu crees que hizo Python?, pues se accedi a la zona de memoria a la que


apunta la etiqueta LISTA, y se modific agregando 5555 y como la etiqueta
OTRA_LISTA tambin apuntaba a esa zona de memoria entonces tambin se
ver afectada. Observe el valor que muestran ahora dichas etiquetas:

Por eso es muy importante tener en mente que las etiquetas slo eso son,
etiquetas lo importante es saber a qu objeto almacenado apuntan y por tanto
es indistinto con cul etiqueta hubiese hecho tal cambio.
Ahora ensayemos los casos en los que las etiquetan apuntan a distintas zonas de
memoria.

Agreguemos 5555 al objeto que apunta la etiqueta LISTA con el mtodo append()

Observemos el valor que muestran ahora dichas etiquetas:

Es obvio que suceda esto! ya que al fin de cuenta LISTA y OTRA_LISTA son
objetos distintos, ya que apuntan a zonas de memoria distintas y slo se modific
a la zona de memoria a la que apuntaba la etiqueta LISTA.

TIPOS DE IGUALDADES
Habamos dicho, que es posible que un objeto tenga varias etiquetas, por lo que
tal vez ests preocupado en saber cundo dos etiquetas representan en realidad
un mismo objeto, es decir, quieres saber si dichas etiquetas apuntan a la misma
zona de memoria; o tal vez ests ansioso por saber cundo dos etiquetas apuntan
a zonas de memoria distintas pero los objetos all guardados; presentan idnticos
atributos y se pueden someter a los mismos mtodos.

Ilustremos esto con un ejemplo, las etiquetas LISTA1 y LISTA2 representan en


realidad al mismo objeto, ya que apuntan a la misma zona de memoria, sin
embargo, la etiqueta LISTA3 apunta a otra zona de memoria, es decir, la etiqueta
LISTA3 no representa el mismo objeto que el objeto que representan las etiquetas
LISTA1 y LISTA2.

Y usted dir: Qu me importa si estn o no en la misma zona de memoria, el


punto es que tenemos la lista [1, 2, 3]!. Y yo le dir a usted. Bien, pero si accede y
modifica a la zona de memoria a la que apunta LISTA3, slo esa etiqueta se ver
afectada, pero si accede a la otra zona de memoria, bien sea con la etiqueta
LISTA1 o con LISTA2 entonces slo ellas dos se vern afectadas, porque
apuntan al mismo objeto. Por lo que es muy importante tener presento esto.
Por tanto entraremos a distinguir dos tipos de igualdades: La igualdad superficial y
la igualdad profunda. Por ejemplo LISTA1, LISTA2 Y LISTA3 son iguales en forma
superficial, pero LISTA1 y LISTA2 son diferentes a LISTA3 en forma profunda.

Igualdad superficial: Dos objetos tienen igualdad superficial si presentan


igualdad de atributos y mtodos indistintamente si estn o no almacenados en
la misma zona de memoria.
Poco riguroso: Dos objetos tienen igualdad superficial si tienen el mismo valor
La igualdad superficial la comprobaremos en Python con el operador de
comparacin == el cual arroja dos resultados posibles: True False

Igualdad profunda: Dos objetos tienen igualdad profunda si adems de tener


igualdad superficial, son objetos guardados exactamente en la misma zona de
memoria, es decir, realmente no se tienen dos objetos sino 1.
La igualdad profunda de dos objetos la comprobaremos en Python
comparando sus identificadores con la funcin id() o usando el operador de
comparacin is

OBJETO SECUENCIAL TIPO CADENA (STRING)


Una cadena es una secuencia de caracteres (letras, nmeros, espacios, marcas
de puntuacin, etc.) y en Python se distingue porque va encerrada entre comillas
simples o dobles.

Se puede usar el comando type para saber qu tipo de dato se tiene

1. Codificacin Unicode y raw


Analicemos el siguiente script

Esto es lo que se muestra en la consola cuando se ejecuta

La letra u que se encuentra inmediatamente antes de la cadena; alude a la


codificacin Unicode, tambin puede ser usada la codificacin raw que se
representa con la letra r, aunque en este caso esta ltima no funciona.
2. Concatenacin de cadenas:

3. Repetir una cadena

4. Escapes
La barra invertida se denomina carcter de escape y es un carcter especial, ya
que indica que el siguiente carcter tiene un significado diferente del usual. Dos
escapes son especialmente tiles: \n y \t
El escape \n es un salto de lnea y el escape \t es un tabulador horizontal

A la izquierda se muestra un script y a la derecha se muestra el resultado de su


ejecucin (lo que se muestra en la consola) usando escapes.

5. Pertenencia de un carcter a una cadena


Se hace uso del comando in, en los siguientes ejemplos pregunt si r, z y o
pertenecan a la cadena Ingeniero

6. Indexacin
Cuando sea necesario acceder a cada uno de los caracteres de una cadena se
puede hacer uso de un operador de indexacin. El ndice del elemento al que se
desea acceder debe encerrarse entre corchetes, la cadena puede indexarse de
izquierda a derecha (empezando con ndice 0) o de derecha a izquierda
(empezando con ndice -1).

Tambin se puede acceder a porciones de la cadena, para la indexacin [a:b] se


comienza desde el ndice a hasta el ndice b-1, es decir, no se incluye el ndice b.
Para la indexacin [a:] se toma desde el ndice a
hasta el ndice -1
(incluyndolo). Para la indexacin [:b] entonces se toma desde el ndice 0 hasta el
ndice b-1, es decir el ndice b no se incluye.

7. Tamao de una cadena


Para averiguar el tamao de una cadena se hace con la funcin len

Nota: Como se puede observar, a pesar que el escape \t (el tabulador) no se


muestra cuando se imprime la cadena, ste ocupa un espacio; como se puede
constatar en el tamao.
8. Convertir un escalar en una cadena
Esto se hace con la funcin str

Como se puede observar al usar el comando type podemos constatar que el tipo
de dato ha pasado de ser escalar (int o float) a ser de cadena (string)
9. Convertir a minscula o a mayscula una cadena o una zona de la cadena

10. Forma de almacenar la informacin Python para las cadenas


Escalares, cadenas y tuplas son objetos inmutables. Python almacena en la
memoria una sola vez cada valor inmutable. Si dos o ms variables contienen ese
valor, stos apuntan a la misma zona de memoria. Por tanto se pueden interpretar
a las variables como formas de acceder a una zona determinada de memoria.

Como se puede observar en cada celda no se almacena el carcter como tal, sino
la referencia a dicho carcter. Obviamente si por ejemplo a la variable c se le
asigna otro valor, entonces apuntar a otra zona de memoria; a,b y d seguirn
apuntando a la zonas de memoria iniciales.

Nota: El comando is es para saber si dos variables apuntan o no a la misma zona


de memoria

OBJETO SECUENCIAL TIPO LISTA


Una lista es una secuencia; las listas pueden contener cualquier tipo de dato:
nmeros, cadenas, booleanos,, y tambin listas. Una lista va encerrada entre
corchetes y cada elemento va separado del siguiente elemento por una coma.

1. Concatenacin de listas

2. Repeticin de listas

3. Tamao de listas

Si se quiere saber el tamao de una sublista o de una cadena, se sigue la misma


lgica de lo que se explic en la indexacin, basta con localizar con los ndices la
ubicacin de tal sublista o cadena.

4. Indexacin
Supongamos que se desea acceder al carcter v localizado en la cadena Olivo
en la lista L mostrada a continuacin. Este es el esquema de pensamiento para
acceder a dicha letra:

O cualquier combinacin usando los ndices mostrados en el esquema.

Obviamente, si se desea acceder solamente al elemento de la lista L que le


corresponde el ndice 3 o -4 se procede as:

Tambin se puede acceder a porciones de la lista, para la indexacin [a:b] se


comienza desde el ndice a hasta el ndice b-1, es decir, no se incluye el ndice b.
Para la indexacin [a:] se toma desde el ndice a
hasta el ndice -1
(incluyndolo). Para la indexacin [:b] entonces se toma desde el ndice 0 hasta el
ndice b-1, es decir el ndice b no se incluye.

5. Forma de almacenar la informacin de Python para las listas


Con este sencillo ejemplo se puede vislumbrar cmo Python almacena a las listas

Como a y b se definen de forma explcita stas apuntan a zonas de memorias


diferentes a pesar de que sus elementos son idnticos; c y d se definen de
manera implcita, pero es la forma de hacerlo lo que determina si se crea una
nueva zona de memoria o si simplemente se apunta a una zona de memoria ya
creada. Comparemos a las listas ya creadas:

Obviamente es cierto que son idnticas, ya que sus elementos son iguales (ojo
que el orden de los elementos es importante). Sin embargo hay que tener en
mente que no todas las variables apuntan a la misma zona de memoria, como se
puede constatar a continuacin.

Esto es muy importante, ya que si se modifica cierta zona de memoria, todas las
variables que apunten a dicha zona arrojarn dicho valor modificado.

Como c apunta a una zona de memoria diferente sigue intacta. Por tanto se puede
concluir que las variables como tal son slo formas de acceder a una zona de
memoria determinada.
Nota: Como se explic anteriormente, en realidad las celdas no guardan al
carcter como tal sino la referencia a dicho carcter. Por ejemplo como se observa
a continuacin, la primera letra a de Natalia con la primera letra a de Sandra son
en realidad el mismo objeto.

6. Saber si un elemento pertenece a una lista


Para ello se usa el comando in, a su izquierda se debe colocar el elemento que se
quiere buscar y a su derecha la lista donde se quiere buscar tal elemento.

Ten presente que tal comando es para buscar elementos de una lista, hola es
un elemento de la lista L mas no la letra l la cual es un elemento de la cadena
como tal.

Pero no te preocupes, todo es cuestin de tener un poco de imaginacin

7. Convertir una cadena en una lista


Para convertir una cadena en una lista se hace uso del comando list

8. Modificacin de las listas


Las listas son mutables, por tanto se les pueden cambiar sus elementos, aumentar
o disminuir su tamao. Ten presente que como tal las variables slo son formas de
acceder a una zona de memoria por tanto todas las variables que apunten a una
zona de memoria determinada tomarn el valor actualizado de dicha zona al
modificarla.

Cambiar elementos

Se puede cambiar un elemento de la lista sea por otro valor escalar o por una
cadena o incluso por una sublista.

Las cadenas siguen siendo inmutables, observa lo que sucede cuando se intenta
cambiar la l de la palabra hola por j

No es que no se pueda cambiar a la cadena hola por un valor sea numrico o


secuencial, lo que no se puede modificar es el interior de la cadena como tal.

Cambiar zonas de una lista

Recuerda que en la indexacin [a:b] se comienza desde el ndice a hasta el


ndice b-1, es decir, no se incluye el ndice b. Para la indexacin [a:] se toma
desde el ndice a hasta el ndice -1 (incluyndolo). Para la indexacin [:b]
entonces se toma desde el ndice 0 hasta el ndice b-1, es decir el ndice b no se
incluye.

Aadir un elemento a una lista

Ya se puede intuir formas de agregar trminos al final de la lista

Pero la ms eficiente es usando el comando append()

Borrar un elemento o una zona de una lista

Para borrar un elemento o una zona de una lista se usa el comando del

OBJETO SECUENCIAL TIPO TUPLA


Las tuplas pueden contener cualquier tipo de dato: nmeros, cadenas, booleanos,
tuplas e incluso listas. Una tupla va encerrada entre parntesis y cada elemento va
separado del siguiente elemento por una coma.

Lo explicado de forma detallada en listas se aplica a las tuplas, por lo que slo se
dar un breve repaso.
Concatenar tuplas

Pertenencia de un elemento a una


tupla

Repetir tuplas

Convertir una cadena a una tupla

Tamao de tuplas

Convertir una lista a una tupla

Indexacin

La diferencia entre tuplas y listas es que las primeras son inmutables y las
segundas son mutables. Por ejemplo, a continuacin se intent cambiar al primer
elemento de la tupla y Python se quej.

Sin embargo cuando se tiene una lista dentro de una tupla slo la lista es
modificable, el resto de elementos de la tupla permanecern inalterables.

El resto queda a tu imaginacin.

LIMPIAR PANTALLA DEL INTRPRETE


(LA TERMINAL)

En la consola:
En Windows: Se ejecuta import os y luego se ejecuta os.system('cls')
En GNU/Linux: Se ejecuta import os y luego se ejecuta os.system('clear')

Para el script: Primero se tiene que detectar el SO en que corre el script, para
ello se digita:
import os

Luego de ello ya se puede usar a placer os.system('cls') os.system(clear)


dependiendo del sistema operativo windows o GNU/Linux que se tenga.
No es 100% seguro pero podra funcionar: print \f print \f

INGRESAR DATOS A MEDIDA QUE SE EJECUTA EL


SCRIPT
Se desea hacer lo que en Matlab y en Scilab se hace con input. Lo explicar con
un ejemplo. Imaginemos que queremos hacer un script para calcular el rea de un
crculo.

Cuando ejecutemos el programa en la consola nos aparecer, lo siguiente:

Entonces se tiene que ingresar el valor del radio de nuestro crculo y presionar
enter:

Nota: El float que aparece en el script es necesario, ya que si slo se usa el


comando raw_input; Python toma lo que ingreses como una cadena.

ESTRUCTURAS DE CONTROL DE FLUJO


Es posible alterar el flujo de ejecucin de un programa mediante el uso de las
llamadas estructuras de control de flujo, stas se dividen en dos grandes grupos

Sentencias condicionales: Con stas se logra que se ejecuten ciertas


instrucciones y ciertas no.

Sentencias iterativas: Con stas se logra que ciertas instrucciones se repitan una
cantidad determinada de veces.
1. Sentencia condicional if

Hay que tener muy presente dos cosas:

Cada condicional debe finalizar en dos puntos.

Se debe hacer un sangrado (indentacin) despus de cada condicional, ya que


este sangrado significa que esas instrucciones estn cobijadas bajo ese
condicional.

Para tener presente lo importante que es la indentacin veamos los siguientes


script (a su derecha se muestra el resultado de ejecucin mostrado en la consola).

En particular fjate en la lnea print Hola mundo, en el primer script esta lnea no
est cobijada por ningn condicional; por lo que saldr siempre que ejecutemos el
script independiente del valor de NUM, en el segundo script esta lnea est
cobijada en la condicin de los nmeros mayores que 100, por tanto es obvio que
no salga al ejecutarse el programa, ya que la variable NUM vale 90.

2. Bucle while
Hay que tener muy presente tres cosas:

La condicin debe finalizar en dos puntos.

Las instrucciones deben tener un sangrado (indentacin) para estar cobijadas


por el bucle while.

Hay que disear las instrucciones para que se repitan una cantidad finita de
veces, porque si no estaramos ante un bucle infinito.

A continuacin se muestra un script que calcula la suma de los primeros 10


nmeros naturales, como se puede observar el bucle finaliza cuando contador se
hace mayor que 10.

Y esto es lo que se muestra en la consola

3. Bucle for

Hay que precisar que el enfoque de Python para el bucle for se centra en la idea
de que la variable que en este caso se llam elemento no toma el valor de los
ndices de la secuencia en cada iteracin, sino que va tomando el valor de cada
elemento en cada iteracin hasta recorrer toda la secuencia.
Por ejemplo en el siguiente script, la variable deimer en la primera iteracin
tomar el valor de Sara, en la segunda iteracin el de Catalina y as
sucesivamente.

Esto es lo que se muestra en la consola al ejecutar dicho script

FUNCIONES y PROCEDIMIENTOS
Una funcin es un fragmento de cdigo asociado con un nombre, que realiza una
serie de tareas y devuelve un objeto, ese objeto puede ser escalar (int, float,
complex) o un objeto secuencial (cadena, lista o tupla).
A los fragmentos de cdigo que tienen un nombre asociado y no devuelven
objetos se les suele llamar procedimientos. En Python estrictamente hablando no
existen los procedimientos, ya que aunque el programador no especifique un valor
de retorno; se devolver None.
1. Definir una funcin
Una funcin en Python se define as:

O en caso de que no tenga parmetros, as:

Es necesario precisar algunas cosas:

Definir una funcin slo asocia un mtodo de clculo a un identificador (nombre


de la funcin) y no supone ejecutar dicho mtodo de clculo. Para que la
funcin se ejecute hay que invocarla.

Cuando se ejecuta una funcin y se llega a la sentencia return sta fuerza a


terminar de inmediato la ejecucin de dicha funcin; devolviendo el valor que le
sigue.
En este ejemplo la cadena Hola
mundo jams se imprimir cuando se
invoque a la funcin mayor_de_edad,
porque una vez que se llegue al return
ste
devolver
True

False
dependiendo a que condicin ingres y
la ejecucin de la funcin terminar
inmediatamente.

2. Definir un procedimiento
Dependiendo si tiene o no parmetros un procedimiento se define as:

Es necesario precisar algunas cosas:

Los procedimientos aceptan el uso de la sentencia return aunque sin


expresin alguna a continuacin; una vez que se llegue a la sentencia return el
procedimiento finaliza de inmediato

Al invocar el procedimiento al
que llamamos mayor_que_dos
la cadena Hola mundo jams
se imprimir, porque una vez que
se llegue al return la ejecucin
de dicho procedimiento terminar
inexorablemente.

Volvemos a repetir, aunque no uses return, Python har devolver el valor


None.

Esto se muestra en la consola


al ejecutar este script

3. Variables globales y locales


Las variables denominadas variables locales son las que se encuentran en el
cuerpo de la funcin o del procedimiento, incluyendo a los parmetros, las
variables locales una vez se termine la invocacin de la funcin o del
procedimiento se destruyen. Las variables globales son las que se encuentran en
el programa principal.
Python utiliza una regla simple para decidir si una variable usada en la funcin o
procedimiento es local o global: Si dentro de la funcin o procedimiento a una
variable se le asigna un valor, se considera como una variable local; de lo
contrario, se considera como una variable global. Relee lo anterior, porque es muy
importante.
Para aclarar veamos el siguiente esquema:

Como a las variables v, w, a, q aparecen asignadas en el cuerpo del


procedimiento o funcin, se consideran variables locales. No te preocupes; Python
diferencia a local de a global y dentro de la funcin o procedimiento trabajar con
a local y cuando finalice la invocacin, a local se destruir.
Y qu pasa con la variable c que se encuentra en el cuerpo de la funcin o
procedimiento?, como la variable c no aparece asignada en el cuerpo de la
funcin o procedimiento, se toma como una variable global y usar por tanto el
valor que tenga en el programa principal en el preciso instante de la invocacin a
la funcin o procedimiento.

Pero observa un detalle, para qu disear una funcin como la mostrada en ese
esquema?, la idea es que la funcin slo trabaje con los parmetros x,y,z y genere
sus propias variables locales (mediante asignaciones como lo hace v,w,a) sin
estar usando valores de variables globales que no fueron ingresadas como
argumentos (como lo hace q al usar a la variable global c).
Ejemplo aclaratorio 1:
Observemos el siguiente script, para constatar que Python diferencia una variable
global de una local (aunque tengan el mismo nombre)

Cuando se ejecuta el anterior script mira lo que se muestra en la consola

Por qu sucede este error?, simple la variable a aparece asignada dentro de la


funcin ejem as: a = a + x, por tanto dentro de la funcin a la variable a se le
toma como una variable local (Python la diferencia de a global que vale 10), pero
el punto es que a local no tiene valor an, cmo se va a sumar ella misma con x
entonces?. Ese es el error!

Solucionemos este problema, observa de nuevo el script:

Al ejecutar el script esto es lo que se muestra en consola

Python toma a la variable a dentro de la funcin como una variable local y le


asigna un valor de 30 (observa que a global vale 10), una vez finaliza la
invocacin de la funcin a local se destruye y la que se muestra en la sentencia:
print Observa el valor de a: , a

Obviamente ser a global

Ejemplo aclaratorio 2
Veamos cmo sucede el paso de parmetros al invocar a una funcin o
procedimiento. En el siguiente esquema los parmetros del procedimiento son x,
y y los argumentos son las variables globales a y b

Cuando se invoca el procedimiento proce, sucede esto:

a y x quedan apuntando a la misma zona de memoria


b e y quedan apuntando a la misma zona de memoria
Por ejemplo, si al ejecutar el procedimiento proce modificamos directamente la
zona de memoria a la que apunta por ejemplo la variable x, obviamente la variable
global a se actualizar a ese valor modificado de la zona de memoria. Ten
presente que una vez finalizada la ejecucin del procedimiento todas las variables
locales se destruirn, incluyendo los parmetros x e y.
Aunque como bien sabrs, las cadenas, los escalares y las tuplas (siempre y
cuando no tengan listas en su interior) no se les puede modificar directamente la
zona de memoria a donde apunten sus variables ya que son datos inmutables.

Ejemplo aclaratorio 3
Con lo aprendido en ejemplo anterior, analicemos el siguiente script

La variable a es un dato mutable (es una lista), y la variable global b es un dato


inmutable (es un escalar), por lo que slo es susceptible de cambio el valor de la
variable global a, que de hecho sucede, ya que la funcin append hace
precisamente eso, actuar en la zona de memoria directamente aadiendo un valor
al final de la lista, a dicha zona de memoria append accede por medio de x
(recuerda que al invocar proce se dio esta asignacin x = a).
Esto es lo que se muestra en la consola al ejecutar el anterior script:

Fjate en otro detalle, hay una b local (de valor 499) y una b global (de valor 99),
pero despus slo sobrevive la b global, ya que la b local se destruye al finalizar
la ejecucin de la funcin.

Cmo invocar a funciones de mdulos creados


Vamos a crear un mdulo que contendr dos funciones, una que calcular el cubo
de un nmero y otra funcin que calcular el volumen que ocupa un gas ideal. (Al
mdulo lo guardaremos con el nombre func_y_proce)

Supongamos que estamos elaborando un script (al que hemos guardado con el
nombre de ensayo) y necesitamos invocar a la funcin cubo y a la funcin
volumen_gas_ideal, para ello procedemos como se muestra a continuacin:

Esto es lo que se muestra en la consola cuando se ejecuta el script ensayo

Para lo explicado anteriormente tanto el script como el mdulo donde definimos a


las funciones deben estar guardadas en una misma carpeta (en este caso la
guard en una carpeta llamada Ejemplo de funciones y procedimientos).

4. Un consejo final:
Desde una funcin o procedimiento es posible imprimir informacin directamente
en pantalla (usando print) o pedir que ingreses informacin del teclado (usando
input o raw_input), pero slo hazlo cuando el propsito de esa funcin o de ese
procedimiento sea precisamente mostrar esa informacin o leer lo que ingresas.
De lo contrario, es mejor que imprimas la informacin que quieras mostrar o que
pidas los datos desde el programa principal, no desde la funcin o procedimiento.

IMPORTACIN DE MDULOS
En el ltimo ejemplo de la seccin anterior, importamos un mdulo que contena
unas funciones que habamos definido, pero nos limitamos a importarlo cuando
tanto el script principal y el script secundario (el mdulo de funciones) estaban en
la misma carpeta.
Imaginemos que estamos trabajando en un script principal y tenemos varios
scripts secundarios que pueden estar en otras carpetas o subcarpetas, deseamos
importar algo de ellos, a lo mejor un mdulo entero o una funcin en particular que
tengamos definida en algn mdulo, o una constante etc. Para poderlos importar
necesitamos que esas carpetas o subcarpetas dejen de serlo y se conviertan en
paquetes. Cmo hacer esto?, muy simple, en la carpeta o subcarpeta DEBE
estar un archivo llamado __init__.py dicho archivo puede estar incluso vaco, pero
es necesario que se encuentre presente en nuestra carpeta o subcarpeta; para
que stas sean tratadas de all en ms como paquetes y poder con ello; hacer
importaciones. Veamos el siguiente esquema:

Imagina que ests trabajando en el modulo1.py que est en el paquete llamado


PaquetePrincipal y deseas importar una funcin que se encuentra en el modulo1
del paquete llamado paquete1. Nada ms simple:
from paquete1.modulo1 import funcion_deseada

Ya puedes usar la funcin funcin_deseada en tu script principal. Tal vez deseas


colocarle un alias a tu funcin, a lo mejor eres algo perezoso como para escribir
funcion_deseada eso tan largo!
from paquete1.modulo1 import funcion_deseada as fun

A lo mejor deseas usar una constante que tienes definida en el modulo1.py que
se encuentra en el paquete llamado subpaquete1
from paquete1.subpaquete1.modulo1 import CONSTANTE_DESEADA

O si lo deseas colocarle un alias a tu constante, puedes apodarla CON por


ejemplo
from paquete1.subpaquete1.modulo1 import CONSTANTE_DESEADA as CON

NOTA: La ruta que coloqu entre el from y el import se llama el espacio de


nombre (su namespace si te hace sentir mas cool) del mdulo.
Por ejemplo ya nosotros habamos hecho esto, aunque con otra configuracin,
por ejemplo, deseamos calcular el seno de 30, hacamos esto

import numpy as np

Con ello habamos importando el mdulo numpy colocndole un alias: np y luego


si queramos por ejemplo calcular el seno de algn nmero (por ejemplo el seno
de 30) hacamos esto: np.sin(30)

NECESITAMOS OTROS OBJETOS


Al comienzo de este texto, le habamos planteado que usted tratara siempre con
objetos, es ms, ya se familiariz con los tipos de objetos numricos (int, float y
complex) y tambin con los tipos de objetos secuenciales (cadena, lista y tupla).
Supongamos que yo le pido a usted que me elabore un script que sea capaz de
almacenar su identificacin (Nombre y Apellido). Bien, felizmente a los pocos
segundos usted propone el siguiente script:

Y realmente usted ha hecho lo que le propuse, pero su programa adolece de algo,


y es que la etiqueta NOMBRE y la etiqueta APELLIDO aparecen desligadas, es
decir, usted est de acuerdo que su nombre y apellido conforman una unidad; su
identificacin, pero eso no es reflejado en el programa que usted plante. Qu tal
que no slo fuera su identificacin, sino la de miles de personas?crear
entonces dos mil variables? obviamente no parece admisible esto.
Tal vez usted proponga almacenar entonces los nombres en una lista y los
apellidos en otra, de tal forma que la identificacin de una persona se vaya
correspondiendo nombre y apellido en los ndices de las listas NOMBRE y
APELLIDO. Por ejemplo, que en la posicin 7 de la lista NOMBRE se encuentre el
nombre de una determinada persona y en la posicin 7 de la lista APELLIDO se
encuentre su apellido. Pero seguimos con el mismo problema de la independencia
de las dos variables ahora tipo listas, adems acaba de empeorar la situacin,
ahora tenemos que recordar los ndices en donde se encuentra la identificacin de
una persona. Pero bueno, te lo acepto.
Pero resulta, que te pido que no slo deseo guardar la identificacin de las
personas, sino que adems quiero que el script almacene: El peso, La estatura, La
edad, la nacionalidad de la personaetc. crears listas para cada una de esos
requerimientos? mmmm creo que el problema se te est saliendo de las manos.
Pero eso est sucediendo porque ya los objetos bsicos con los que habamos
trabajado resultan limitados para resolver dicho problema!, ya te habamos
advertido que esto sucedera. Te acuerdas cuando queras crear objetos y yo te
pregunt si eras Albert Einstein?.

Ahora la pregunta del milln: Todo esto suena muy bien pero Cmo decirle a
Python que cree mis propios objetos?...estoy ansioso por empezar a crearlos!.
La respuesta del milln: Debes aprender a crear un objeto-clase

OBJETO-CLASE
El objeto-clase ser la madre que parir (por decirlo as) a tus objetos
(denominados objetos-instancia) y al proceso de parto lo llamaremos
instanciacin. Todos los objetos-instancia que para el objeto-clase tendrn
atributos comunes (llamados atributos de objeto-clase) pero tambin podrn tener
atributos particulares (llamados atributos de objeto-instancia) que los distinguir de
sus hermanos (de otros objetos-instancia); eso lo lograremos con el mtodo
denominado: __init__
Los mtodos son funciones, pero dentro de un objeto-clase se denominan
mtodos, los atributos bien sean atributos de objeto-clase o atributos de objetoinstancia son variables o constantes, pero dentro de un objeto-clase se denominan
atributos.
Hoy me siento imaginativo. pues bien, Sonia es una hermosa mujer de ojos
azules, tiene una piel que se asemeja al color tenue de una tarde (ella es morena)
y tiene una preciosa nariz aguilea, la cuestin es que Sonia quiere tener hijos, y
todos los hijitos de Sonia heredarn esos atributos, pero tambin tendrn atributos
particulares que los diferenciarn de sus hermanos.
Un objeto-clase (Sonia en este caso), tendr la estructura bsica siguiente:

Bien, lo anterior slo es el objeto-clase, es decir, es nuestra preciosa Sonia, por


tanto an Sonia no ha comenzado a tener a sus hijitos. Y cmo puede tener
Sonia a sus hijitos? as:
Bebe1 = Sonia(pelonegro, delgado, cascarabia,)
Felicidades Sonia! Has tenido a tu primer beb

Crear un objeto-instancia es semejante a invocar a una funcin, todos esos


atributos particulares del Bebe1: pelonegro, delgado, cascarabia son
mandados al mtodo __init__ cuyos parmetros son en ese orden: color_pelo,
consistencia, comportamiento
Y si Sonia quiere tener otro hijito? pues volvemos a hacer lo mismo
Bebe2 = Sonia(rubio, gordo, apacible,)
Felicidades Sonia! Has tenido a tu segundo beb

Bien, Sonia va alimentar a su Bebe1 porque comenz a llorar, cmo hace Sonia
eso?. Bueno ya Bebe1 contiene un mtodo para ello:

Bebe1.dejar_de_llorar(200)
Sonia le dio 200 mL de leche a su hijito qu crees que suceder?...yo creo que
seguir llorando ya que cumple las dos condiciones (mL_de_leche <300 and
comportamiento == cascarabia) que tiene el condicional del mtodo invocado.
S que te estars preguntado qu es ese self extrao que aparece all, pues mira,
en el instante del parto de cada hijito de Sonia (la instanciacin del objeto-clase) y
cada vez que un hijito acceda a uno de sus mtodos; Python a cada hijito de Sonia
le coloca otra etiqueta: self

En el parto (instanciacin)
Lo que usted ve
Bebe1 = Sonia(pelonegro, delgado, cascarabia,)

Lo que Python internamente hace


Crea al hijito de Sonia (al objeto-instancia) lo etiqueta como Bebe1 y luego hace
las siguientes asignaciones:
self = Bebe1
color_pelo = pelonegro
consistencia = delgado
comportamiento = cascarabia
Para luego invocar el mtodo __init__
__init__(self, color_pelo, consistencia, comportamiento,)

Cuando un hijito(Objeto-instancia) accede a uno de sus mtodos


Lo que usted ve
Bebe1.dejar_de_llorar(200)

Lo que Python internamente hace


Python hace las siguientes asignaciones:
self = Bebe1
mL_de_leche = 200
Luego manda dicha informacin al mtodo invocado:
dejar_de_llorar(self, mL_de_leche)

Para invocar un mtodo del objeto-instancia tambin se podra hacer as:


Cuando un hijito (Objeto-instancia) accede a uno de sus mtodos
Lo que usted ve
Sonia.dejar_de_llorar(Bebe1, 200)

Lo que Python internamente hace


Python hace las siguientes asignaciones:
self = Bebe1
mL_de_leche = 200
Luego manda dicha informacin al mtodo invocado:
dejar_de_llorar(self, mL_de_leche)

Esta ltima estructura de invocacin de un mtodo a travs del objeto-clase ser


muy til para entender el captulo HERENCIA Y POLIMORFISMO, as que tenla
presente para que no te tomen desprevenido.
Dejemos a Sonia disfrutar de sus dos hijitos, y pongmonos nosotros a programar.
Observemos a la siguiente clase, es una clase que crear puntos y tiene definido
algunos mtodos, uno es para mostrar el punto creado y el otro para mostrarlo en
coordenada polar.

Por tanto cualquier punto que se cree con la anterior clase heredar dichos
mtodos, aunque en este caso no colocamos atributos de objeto-clase. Bien,
creemos a nuestro primer punto.

Listo, eso es todo. Ya creamos a nuestro primer punto. Tal vez quieras acceder a
los mtodos y atributos de tu objeto-instancia, por ejemplo, en spyder version2.2.5
despus de escribir la etiqueta del objeto-instancia creado seguido de un punto
(punto del teclado de tu computador para que no te confundas) se nos despliega
un men donde nos muestra los atributos y mtodos que tiene nuestro objetoinstancia PUN1. Observa:

Lo ves? Espero que ahora si me creas cuando te insist hasta el cansancio que
un objeto contiene tanto atributos (en este caso cord_x, cord_y) como mtodos
(en este caso cord_polar, mostrar_punto). Ya hablaremos despus de las otras
cosas que se ven all (que son mtodos heredados del objeto-clase object) .
Acceder al mtodo cord_polar

Acceder al mtodo mostrar_punto

Esto es lo mostrado en la terminal

Esto es lo mostrado en la terminal

Acceder al atributo cord_x

Acceder al atributo cord_y

Esto es lo mostrado en la terminal

Esto es lo mostrado en la terminal

Si creas otro punto del objeto-clase Punto, puedes acceder de la misma forma a
sus atributos y sus mtodos. Por ejemplo si etiquetas al otro punto como PUN2
entonces podrs acceder a un mtodo o a un atributo as:
PUN2.atributo PUN2.metodo()

GESTIN DE MEMORIA DE LOS ATRIBUTOS


A continuacin se muestra un esquema aproximado de la gestin de memoria que
hace Python del objeto-clase y del objeto-instancia as como de sus atributos:

Puedes observar que si al atributo del objeto-clase se le hace una asignacin


tambin se ver afectado el atributo del objeto-instancia heredado. Obviamente si
la Zona de memoria 1 es mutable, podemos acceder para modificarla tanto con la
etiqueta del atributo del objeto-clase as como con la etiqueta del atributo del
objeto-instancia heredado. En cambio si al atributo del objeto instancia heredado
se le hace una asignacin; esto es lo que suceder:

Es decir, no se ver afectado el atributo de objeto-clase ya que simplemente el


atributo de objeto-instancia heredado se emancipa de las riendas del atributo del
objeto-clase y pasa a apuntar a otra zona de memoria.
En el siguiente ejemplo el objeto-clase tiene un atributo (ATRIBUTO = 99) el cual
hereda su objeto-instancia y adems este ltimo tiene un atributo de objetoinstancia (parametro = 20).

Y esto es lo que se muestra en la consola al ejecutar el anterior script:

HERENCIA Y POLIMORFISMO
No hace mucho hablbamos de mi musa Sonia, pues bien, resulta que Sonia
tambin hered atributos de su madre llamada Object (ciertamente no es un
nombre muy femenino que digamos), y dichos atributos los heredarn tambin los
descendientes de Sonia (sus objetos-instancia).
De hecho en Python todos los objetos son descendientes del objeto-clase Object.
No me crees?, hagamos varias pruebas:

Y no slo eso, observa el objeto-clase int, float, cadena(string), lista y tupla.

Y ten seguridad, que los objetos-clases que programes y los objetos-instancias


que generes, sern descendientes (instancias al fin de cuenta) del objeto-clase
object, es por ello que Python recomienda colocar en la cabecera de la clase
inmediatamente despus de la etiqueta del objeto-clase, entre parntesis, la clase
de la que es heredera: object.
Pero tambin puede darse el caso que tu clase sea heredera de otros objetosclase, entonces debes colocarlos como una tupla. Ilustremos esto ltimo con un
ejemplo:

Al ejecutar el anterior script, esto es lo imprimido en la consola.

Observa que se tienen dos mtodos con la misma etiqueta (el mtodo area) y l
se comporta de una forma cuando se aplica al objeto-instancia del objeto-clase
Cuadrado y se comporta de otra forma cuando se trata del objeto-instancia del
objeto clase Rectangulo, a esto se le llama polimorfismo.

BIBLIOGRAFA
LIBRO INPRESCINDIBLE PARA INICIARSE EN PYTHON
[1] Marzal, Andres. Gracia, Isabel : Introduccin a la programacin con Python.
2003

UN LIBRO MUY INTERESANTE


[2] Bahit, Eugenia : Curso: Python para principiantes. 2012

UN LIBRO QUE ESCRIBI EL PROPIO CREADOR DE PYTHON


[3] Guido: El tutorial de Python. 2009

OTROS LIBROS CONSULTADOS


[4] Downey, Allen: Aprenda a Pensar Como un Programador con python. 2002
[5] Pilgrim, Mark: Inmersin en Python 3. 2009
[6] Gonzlez, Ral: Python para todos

UN MUY BUEN ARTCULO PARA ENTENDER LO DE OBJETOSCLASE


[7] http://blog.rvburke.com/2006/11/22/programacion-orientada-a-objetos-enpython/comment-page-1/ consultado el da 26/septiembre/2014

UN CURSO INTERESANTE DE PYTHON


[8] http://www.iaa.es/python consultado el da 26/septiembre/2014

Este no es el fin, ni el principio del fin, pero puede ser el fin del
principio - Winston Churchill