Diferencia entre revisiones de «Curso Python DGA 2011/inmersion python/contenidos/slides2»
De WikiEducator
(Página creada con '{{TEP}}') |
(→La clase como arquetipo del objeto.) |
||
(7 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 1: | Línea 1: | ||
− | {{ | + | {{#widget:Slides}} |
+ | <div class="slides layout-regular template-default"> | ||
+ | <div class="slide"> | ||
+ | = Inmersión en Python II= | ||
+ | == Clases y Objetos == | ||
+ | Luis Miguel Morillas <lmorillas at xml3k.org> | ||
+ | |||
+ | identi.ca: lmorillas | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | === ¿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 | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | === En Python todo son objetos === | ||
+ | <source lang="python"> | ||
+ | print (123).__class__ | ||
+ | print zip.__class__ | ||
+ | print list.__class__ | ||
+ | import os ; print os.__class__ | ||
+ | </source> | ||
+ | |||
+ | Y todo objeto tiene una clase. | ||
+ | |||
+ | </div><div class="slide"> | ||
+ | === La clase como arquetipo del objeto. === | ||
+ | |||
+ | <source lang="python"> | ||
+ | |||
+ | class Estudiante(object): | ||
+ | def __init__(self, nombre, edad): | ||
+ | self.nombre = nombre | ||
+ | self.edad = edad | ||
+ | maria = Estudiante('María', 19) | ||
+ | print maria.nombre | ||
+ | </source> | ||
+ | |||
+ | <source lang="python"> | ||
+ | class <Nombre de la Clase>(Clase Padre): | ||
+ | def metodo (self, parametros): | ||
+ | ... | ||
+ | </source> | ||
+ | </div><div class="slide"> | ||
+ | |||
+ | ===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. | ||
+ | |||
+ | </div><div class="slide"> | ||
+ | |||
+ | === 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. | ||
+ | |||
+ | </div><div class="slide"> | ||
+ | === Un método es una función asociada a un objeto=== | ||
+ | <source lang="python"> | ||
+ | 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() | ||
+ | </source> | ||
+ | |||
+ | </div><div class="slide"> | ||
+ | === 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"''' | ||
+ | <source lang="python"> | ||
+ | maria.edad += 1 | ||
+ | </source> | ||
+ | |||
+ | </div><div class="slide"> | ||
+ | |||
+ | === Herencia=== | ||
+ | <source lang="python"> | ||
+ | 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 | ||
+ | </source> | ||
+ | |||
+ | |||
+ | </div><div class="slide"> | ||
+ | === Herencia con parámetros === | ||
+ | * Si el padre necesitaba parámetros, hay que llamar a su método '''__init__''' | ||
+ | <source lang="python"> | ||
+ | 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 | ||
+ | </source> | ||
+ | |||
+ | </div><div class="slide"> | ||
+ | |||
+ | === Métodos especiales === | ||
+ | <source lang="python"> | ||
+ | __init__(self, ...) | ||
+ | __new__(cls, args) | ||
+ | __del__(self) | ||
+ | __str__(self) | ||
+ | __cmp__(self, otro) | ||
+ | __len__(self) | ||
+ | __getitem__(self, key) | ||
+ | __setitem__(self, key, valor) | ||
+ | ... | ||
+ | </source> | ||
+ | |||
+ | </div><div class="slide"> | ||
+ | === Ejemplos de métodos especiales === | ||
+ | <source lang="python"> | ||
+ | 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) | ||
+ | </source> | ||
+ | |||
+ | </div> | ||
+ | </div> | ||
+ | |||
+ | <div id="weSlideLogo" class="nav"> | ||
+ | '''Inmersión en Python''' [[image:Python-logo.png|200px]] | ||
+ | </div> |