|
|
Línea 1: |
Línea 1: |
| {{#widget:Slides}} | | {{#widget:Slides}} |
| <div class="slides layout-regular template-default"> | | <div class="slides layout-regular template-default"> |
− | <div class="slide"> | + | <div class="slide"> |
− | === Clases y objetos === | + | = Inmersión en Python II= |
| + | == Clases y Objetos == |
| + | Luis Miguel Morillas <lmorillas at xml3k.org> |
| | | |
− | </div><div class="slide"> | + | identi.ca: lmorillas |
| + | </div> |
| + | <div class="slide"> |
| === ¿Qué son? === | | === ¿Qué son? === |
| * Un objeto es una entidad que agrupa un estado y una funcionalidad relacionadas. | | * Un objeto es una entidad que agrupa un estado y una funcionalidad relacionadas. |
Línea 10: |
Línea 14: |
| * Una clase permite crear nuevos objetos que comparten los mismos atributos | | * Una clase permite crear nuevos objetos que comparten los mismos atributos |
| * Muy importantes para optimizar/reutilizar mejor el código | | * Muy importantes para optimizar/reutilizar mejor el código |
− | | + | </div> |
− | En Python todo son objetos | + | <div class="slide"> |
| + | === En Python todo son objetos === |
| <source lang="python"> | | <source lang="python"> |
| print (123).__class__ | | print (123).__class__ |
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
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.
Método __init__
Es un método opcional. Se usará cuando hay que inicializar datos.
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()
- 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"
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
- 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)
...
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)