Diferencia entre revisiones de «Curso Python DGA 2011/inmersion python/contenidos/slides2»

De WikiEducator
Saltar a: navegación, buscar
(Página creada con '{{TEP}}')
 
Línea 1: Línea 1:
{{TEP}}
+
{{#widget:Slides}}  
 +
<div class="slides layout-regular template-default">
 +
<div class="slide"> 
 +
=== Clases y objetos ===
 +
 
 +
</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
 +
 
 +
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>
 +
 
 +
</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"> 
 +
=== Método __init__ ===
 +
Es un método opcional. Se usará cuando hay que inicializar datos.
 +
 
 +
</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>
 +
* 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>
 +
 
 +
* 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>
 +
 
 +
<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>

Revisión de 05:03 2 sep 2011

¿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"
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
  • 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)