Inicio / Wikis / Tutoriales / Python instantáneo - Objetos y cosas

Python instantáneo - Objetos y cosas

Tutorial creado por Magnus Lie Hetland. Extraido de: http://www.mononeurona.org/index.php?idp=204
08 de Noviembre de 2005
Programación estructurada

3 - Objetos y cosas

Supongo que sabes cómo funciona la programación orientada a objetos (de otro modo, esta sección podría resultar un poco confusa, pero no importa, empieza a jugar con los objetos :)). En Python se definen las clases con la palabra clave (¡sorpresa!) class, de este modo:

class Cesta:
# Recuerde siempre el argumento self

def init(self,contenido=None):
self.contenido = contenido or []
def añadir(self,elemento):
self.contenido.append(elemento)
def muestra_me(self):
resultado = for elemento in self.contenido: resultado = resultado + " " + `elemento` print "Contiene:"+resultado Cosas nuevas: ~1) Todos los métodos (funciones de un objeto) reciben un argumento adicional al principio de la lista de argumentos, que contiene el propio objeto. Este argumento, por convención, se suele llamar ##self## (que significa 'uno mismo'), como en el ejemplo. ~1) A los métodos se los llama de este modo: ##objeto.método(arg1,arg2)##. ~1) Alguno nombres de método, como ##__init__## están predefinidos, y significan cosas especiales. ##__init__## es el nombre del //constructor// de la clase, es decir, es la función a la que se llama cuando creas una instancia. ~1) Algunos argumentos son //opcionales// y reciben un valor dado (según lo mencionado antes, en la sección de funciones). Esto se realiza escribiendo la definición así: def magro(edad=32): ... Aquí, se puede llamar a ##magro## con uno o cero parámetros. Si no se pone ninguno, el parámetro ##edad## tendrá el valor 32. ~1) "Lógica de cortocircuito." Esto es un punto... Ver más tarde. ~1) Las comillas invertidas convierten un objeto en su representación como cadena (así que si ##elemento## contiene el número 1, ##`elemento`## es lo mismo que ##"1"## mientras que ##'elemento'## es una cadena literal). ~1) El signo más ##+## se utiliza también para concatenar listas. Las cadenas son sólo listas de caracteres (lo que significa que se puede utilizar indexado, corte y la función ##len## en ellas; chulo, ¿eh?). Ningún método o variable miembro es protegido (ni privado, ni nada de eso) en Python. La encapsulación es, en su mayoría, cuestión de estilo al programar. Retomando el tema de la lógica de cortocircuito... Todos los valores de Python se pueden utilizar como valores lógicos. Algunos, los más "vacíos", como ##[]##, ####, ## y None representan el valor lógico "falso", mientras el resto (como [0], 1 or "Hola, mundo") representan el valor lógico "verdadero".

Las expresiones lógicas como
a and b se evalúan de este modo: Primero, se comprueba si a es verdadero. Si no, simplemente se devuelve su valor. Si , simplemente se devuelve b (que representa el valor lógico de la expresión). La lógica correspondiente a a or b es: Si a es verdadero, devolver su valor. Si no, devolver b.

Este mecanismo hace que
and y or se comporten como los operadores lógicos que supuestamente implementan, pero también permite escribir expresiones condicionales muy curiosas. Por ejemplo, el código

if a:
print a
else:
print b

Se puede sustituir por:

print a or b

De hecho, esto es casi un 'deje' en Python, así que mejor irse acostumbrando. Esto es lo que hacemos en el método
Cesta.init . El argumento contenido tiene el valor por defecto None (que es, entre otras cosas, falso). Por lo tanto, para comprobar si tenía valor, podríamos escribir:

if contenido:
self.contenido = contenido
else:
self.contenido = []

Por supuesto, ahora conocemos un método mejor, Y, ¿por qué no le damos el valor por omisión
[] para empezar? Por el modo en que funciona Python, esto daría a todas las Cestas la misma lista vacía como contenido por omisión. Tan pronto como se empezara a llenar una de ellas, todas tendrían los mismos elementos y el valor por omisión dejaría de ser vacío... Para informarse sobre el tema, lee la documentación y busca la diferencia entre identidad e igualdad.

Otro modo de hacer lo anterior es:

def init(self, contenido=[]):
self.contenido = contenido[:]

¿Adivinas cómo funciona esto? En lugar de utilizar la misma lista vacía siempre, utilizamos la expresión
contenido[:] para hacer una copia (hacemos un corte que contiene toda la lista).

Así que, para hacer realmente una
Cesta y utilizarla (es decir, llamar a alguno de sus métodos) haríamos algo así:

b = Cesta(['manzana','naranja'])
b.añadir("limón")
b.muestra_me()

Hay más métodos mágicos además de
init. Uno de ellos es str, que define el aspecto que quiere tener el objeto si se le trata como una cadena. Lo utilizaríamos en nuestra cesta en lugar de presenta_me :

def str(self):
resultado = ""
for elemento in self.contenido:
resultado = resultado + " " + `elemento`
return "Contiene:"+resultado

Y, si quisiéramos mostrar la cesta
b, simplemente diríamos:

print b

chulo, ¿eh?

La herencia se realiza de este modo:

class CestaMagro(Cesta):
# ...

Python permite la herencia múltiple, así que puede indicar varias super-clases entre los paréntesis, separadas por comas. Las clases se instancian así:
x = Cesta(). Los constructores se definen, como dije, implementando la función miembro especial init. Pongamos que CestaMagro tuviera un constructor init(self,tipo). Podría realizar una cesta de magro así: y = CestaMagro("manzanas") .

Si necesitase llamar al constructor de una super-clase desde el constructor H de
CestaMagro, lo haría así: Cesta.init(self) . Observe que, además de proporcionar los parámetros normales, debe proporcionar explícitamente self, ya que init de la super-clase no sabe con qué instancia está tratando.

Para obtener más información sobre las maravillas de la programación orientada a objetos en Python, mire la sección 9 de la tutoría.
Valora este capítulo:
Autor y licencia de 'Python instantáneo - Objetos y cosas'
Magnus Lie Hetland Extraído de: http://www.mononeurona.org/index.php?idp=204

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.

Opiniona sobre 'Python instantáneo - Objetos y cosas' (0)

Tu nombre debe tener tres caracteres como mínimo.
Es necesario que te des de alta con una cuenta de correo válida.
Es necesario que te des de alta con una cuenta de correo válida.
El contenido del título de tu opinión debe tener tres caracteres como mínimo.
Es obligatorio que selecciones una valoración del recurso.
El contenido del comentario de tu opinión debe tener tres caracteres como mínimo.

Opina sobre este tutorial



* Valoración:
* Nombre:
* Correo electrónico:
* Título:
* Comentario:

Wikis relacionados con 'Python instantáneo - Objetos y cosas'

Esto es un curso intensivo de introducción mínima al lenguaje de programación Python. Si te... Más »
UML (Unified Modeling Language) es un lenguaje que permite modelar, construir y documentar los elementos... Más »
Python es un lenguaje que cada vez recibe más atención, es versátil y poderoso, con... Más »
Una de las características que diferencian al hombre como ser racional o como ''homo sapiens''... Más »
El “hablante ingenuo”, es decir, aquel que no reflexiona expresamente acerca de su lengua, mantiene... Más »
¿Estás seguro de que deseas eliminar este capítulo?