Curso Python DGA 2011/inmersion python/contenidos/slides2
De WikiEducator
Saltar a: navegación, buscar
Contenido
- 1 Inmersión en Python II
- 1.1 Clases y Objetos
- 1.1.1 ¿Qué son?
- 1.1.2 En Python todo son objetos
- 1.1.3 La clase como arquetipo del objeto.
- 1.1.4 self
- 1.1.5 Clase = función
- 1.1.6 Un método es una función asociada a un objeto
- 1.1.7 El método en detalle
- 1.1.8 Herencia
- 1.1.9 Herencia con parámetros
- 1.1.10 Métodos especiales
- 1.1.11 Ejemplos de métodos especiales
- 1.1 Clases y Objetos
Inmersión en Python II
Clases y Objetos
Luis Miguel Morillas <lmorillas at xml3k.org>
identi.ca: lmorillas
¿Qué son?
- Un objeto es una entidad que agrupa un estado y una funcionalidad relacionadas.
- En Python un objeto es un conjunto de atributos
- Una clase permite crear nuevos objetos que comparten los mismos atributos
- Muy importantes para optimizar/reutilizar mejor el código
En Python todo son objetos
print (123).__class__ print zip.__class__ print list.__class__ import os ; print os.__class__
Y todo objeto tiene una clase.
La clase como arquetipo del objeto.
class Estudiante(object): def __init__(self, nombre, edad): self.nombre = nombre self.edad = edad maria = Estudiante('María', 19) print maria.nombre
class <Nombre de la Clase>(Clase Padre): def metodo (self, parametros): ...
self
- Explícitamente hay que usar el self al definir las clases en Python.
- Se refiere a la instancia concreta del objeto.
- Aparecerá como primer parámetro en la definición de los métodos.
- Pero no se usa al llamar a las clases o a los métodos.
- De forma automática, Python pasa la instancia del objeto.
Clase = función
- Al ejecutar clase se produce un nuevo valor.
- El objeto tiene los mismos atributos que la clase salvo el operador ()
- Inicializa el objeto con el método __init__
- Le pasa objeto + parámetros a la clase.
Un método es una función asociada a un objeto
class Estudiante(object): def __init__(self, nombre, edad): self.nombre = nombre self.edad = edad def saluda(self): return 'Hola, me llamo %s' % self.nombre maria = Estudiante('María', 19) print maria.saluda()
El método en detalle
- Primer parametro es la instancia.
- self por convención
- Todas las clases heredan de object
- Los atributos pueden añadirse, borrarse, modificarse, en cualquier momento
- En Python todo es público
- Por convención, lo privado empieza por _
Ejemplo: self._atributo
- ¡Python no es Java!: No "setters" y "getters"
maria.edad += 1
Herencia
class Base (object): def method(self): print "base.method()" class Deriv (Base): def method ( self ): print "deriv.method()" def other (self): print "deriv.other()" # método añadido
Herencia con parámetros
- Si el padre necesitaba parámetros, hay que llamar a su método __init__
class Persona(object): def __init__(self, nombre): self.nombre = nombre class Estudiante(Persona): def __init__(self, nombre, curso): super(Estudiante, self).__init__(nombre) self.curso = curso
Métodos especiales
__init__(self, ...) __new__(cls, args) __del__(self) __str__(self) __cmp__(self, otro) __len__(self) __getitem__(self, key) __setitem__(self, key, valor) ...
Ejemplos de métodos especiales
class Estudiante(object): def __init__(self, nombre, edad): self.nombre = nombre self.edad = edad def saluda(self): return 'Hola, me llamo %s' % self.nombre def __str__(self): return self.nombre def __repr__(self): return self.nombre def __cmp__(self, per): '''p es otro objeto de tipo persona''' return cmp(self.nombre, per.nombre) if __name__ == '__main__': maria = Estudiante('María', 19) luis = Estudiante('Luis', 21) ana = Estudiante('Ana', 23) estudiantes = [maria, luis, ana] print sorted(estudiantes)