PDF de programación - Tema 2 Orientación a Objetos - Curso de Python Avanzado

Imágen de pdf Tema 2 Orientación a Objetos - Curso de Python Avanzado

Tema 2 Orientación a Objetos - Curso de Python Avanzadográfica de visualizaciones

Publicado el 6 de Mayo del 2018
710 visualizaciones desde el 6 de Mayo del 2018
835,2 KB
60 paginas
Creado hace 12a (01/05/2011)
Tema 2 Orientación a Objetos

Curso de Python Avanzado

Juan Pedro Bolívar Puente

Instituto de Astrofísica de Andalucía

Mayo de 2011

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 2 Orientación a Objetos

Mayo de 2011

1 / 60

Índice

1 Objetos
2 Clases
3 Atributos
4 Encapsulación
5 Herencia
6 Herencia múltiple
7 Objetos ligeros
8 Métodos especiales

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 2 Orientación a Objetos

Mayo de 2011

2 / 60

Índice

Objetos

1 Objetos
2 Clases
3 Atributos
4 Encapsulación
5 Herencia
6 Herencia múltiple
7 Objetos ligeros
8 Métodos especiales

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 2 Orientación a Objetos

Mayo de 2011

3 / 60

Objetos

Objetos

Definición clásica

Objeto = Estado (Atributos)

+ Comportamiento (Funciones)

Como las funciones son valores normales, simplificamos...

Objeto =

Conjunto de Atributos

Pensad en un diccionario al que se accede mediante el operador ’.’

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 2 Orientación a Objetos

Mayo de 2011

4 / 60

Objetos en Python

Objetos

Todo es un objeto

1 Valores simples
2 Clases

3 Funciones
4 Módulos

print (123). __ c la s s_ _
print zip . _ _c la s s_ _
print list . __ c la ss _ _
import os ; print os . __ c la ss _ _

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 2 Orientación a Objetos

Mayo de 2011

5 / 60

Índice

Clases

1 Objetos
2 Clases
3 Atributos
4 Encapsulación
5 Herencia
6 Herencia múltiple
7 Objetos ligeros
8 Métodos especiales

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 2 Orientación a Objetos

Mayo de 2011

6 / 60

Clases

Clases en Python
Todo objeto tiene clase

Clase = Arquetipo del objeto.

Sintáxis

class Clase ( Base1 , Base2 , ...):

< sentencia1 >
...

Las sentencias que definen nombres (def, class, =)
los instalan en la clase.

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 2 Orientación a Objetos

Mayo de 2011

7 / 60

Instanciación

Clases

Clase = función

Ejecutar clase = Instanciación

Produce un nuevo valor.
El objeto tiene los mismos atributos que la clase
salvo el operador () (...aprox...)
Inicializa el objeto con el método
init
Le pasa objeto + parámetros a la clase.

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 2 Orientación a Objetos

Mayo de 2011

8 / 60

Paréntesis terminológico

Clases

Función: Función libre.

def funcion (...): ...

Método: Función “asociada” a un objeto.

class UnaClase ( object ):

def metodo ( self , ...): ...

Primer parametro es la instancia.
self por convención.

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 2 Orientación a Objetos

Mayo de 2011

9 / 60

Paréntesis metodológico

Clases

Python ≥ 2.2 ⇒ “New style classes”

Muchas cosas sólo funcionan con ellas.
super, slots, propiedades, ...
Heredar siempre de object.

Mal

class Base :

pass

Bien

class Base ( object ):

pass

class Deriv ( Base ):

class Deriv ( Base ):

pass

pass

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 2 Orientación a Objetos

Mayo de 2011

10 / 60

Ejemplo ...

Clases

Definiendo una clase

class Foo ( object ):
u n _ a t r i b u t o = 3

def __init__ ( self , otro = None ):

self . o t r o _ a t r i b u t o = otro

def metodo ( self ):

print " Metodo de : " , self

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 2 Orientación a Objetos

Mayo de 2011

11 / 60

Clases

Ejemplo ...

Usando la clase ...

obj = Foo ()
print obj
print obj . u n _ a t r i b u t o
print obj . o t r o _ a t r i b u t o

obj = Foo (10)
print obj . o t r o _ a t r i b u t o

obj . u n _ a t r i b u t o = 15
print obj . u n _ a t r i b u t o
print Foo . u n _ a t r i b u t o
obj . metodo ()

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 2 Orientación a Objetos

Mayo de 2011

12 / 60

Índice

Atributos

1 Objetos
2 Clases
3 Atributos
4 Encapsulación
5 Herencia
6 Herencia múltiple
7 Objetos ligeros
8 Métodos especiales

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 2 Orientación a Objetos

Mayo de 2011

13 / 60

Atributos

Atributos

Los atributos pueden añadirse, borrarse, modificarse,

en cualquier momento

obj . n u e v o _ a t r i b u t o = 2
print obj . n u e v o _ a t r i b u t o

del obj . n u e v o _ a t r i b u t o
print hasattr ( obj , ’ n u e v o _ a t r i b u t o ’)

obj . metodo = 3
print obj . metodo ()

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 2 Orientación a Objetos

Mayo de 2011

14 / 60

Acceso atributos

Atributos

Funciones de acceso sirven para ...

Saltarnos las reglas de identificadores.
Generar dinamicamente nombre atributos.

getattr (obj, atributo)

Acceder al atributo en obj.

setattr (obj, atributo, valor)

Establecer atributo en obj.

delattr (obj, atributo)

Borrar atributo en obj

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 2 Orientación a Objetos

Mayo de 2011

15 / 60

Ejemplo ...

Atributos

Operaciones de acceso

class Bar ( object ):

def func_one ( self ):

print " Primera funcion . "

def func_two ( self ):

print " Segunda funcion . "

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 2 Orientación a Objetos

Mayo de 2011

16 / 60

Ejemplo ...

Atributos

Operaciones de acceso

obj = Bar ()

from random import choice
cadena = choice ([ ’ one ’ , ’ two ’ ])
getattr ( obj , ’ func_ ’ + cadena ) ()

setattr ( obj , ’ una cosa ! ’ , 123)
print getattr ( obj , ’ una cosa ! ’)

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 2 Orientación a Objetos

Mayo de 2011

17 / 60

Índice

Encapsulación

1 Objetos
2 Clases
3 Atributos
4 Encapsulación
5 Herencia
6 Herencia múltiple
7 Objetos ligeros
8 Métodos especiales

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 2 Orientación a Objetos

Mayo de 2011

18 / 60

Encapsulación

Encapsulación

Interfaz = Implementación

Idea

No exponer atributos (mantenibilidad)

Mientras tanto en Python...

Todo es público
Por convención, lo privado empieza por ’ ’
Ejemplo: self. atributo
Atributos intercambiables por metodos

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 2 Orientación a Objetos

Mayo de 2011

19 / 60

Encapsulación

Encapsulación ...

¡Python no es Java!

No hacer “setters” y “getters”

class B a d E x a m p l e ( object ):

_data = None
def set_data ( self , data ):

self . _data = data

def get_data ( self ):

return self . _data

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 2 Orientación a Objetos

Mayo de 2011

20 / 60

Encapsulación

Propiedades

En Python, un atributo puede ser público

si ha de ser accederse desde fuera

Ejemplo version 1

class G o o d E x a m p l e ( object ):

data = None

obj = G o o d E x a m p l e ()
obj . data = 3
print obj . data

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 2 Orientación a Objetos

Mayo de 2011

21 / 60

Encapsulación

Propiedades ...

Al cambiar los requisitos, usamos:

property([fget[, fset[, fdel[, doc]]]])

Ejemplo version 2

class G o o d E x a m p l e ( object ):

_data = None
def _ se t_ d at a ( self , value ):

print " Setting data "
self . _data = value

def _ ge t_ d at a ( self ):

print " Getting data "
return self . _data

data = property ( _get_data , _ se t_ d at a )

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 2 Orientación a Objetos

Mayo de 2011

22 / 60

Índice

Herencia

1 Objetos
2 Clases
3 Atributos
4 Encapsulación
5 Herencia
6 Herencia múltiple
7 Objetos ligeros
8 Métodos especiales

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 2 Orientación a Objetos

Mayo de 2011

23 / 60

Herencia

Herencia

Una clase puede ...

Heredar los atributos de su padre.
Sobrecargar (redefinir) los atributos de su padre.

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 2 Orientación a Objetos

Mayo de 2011

24 / 60

Ejemplo ...

Herencia

Terminología
Clase base → clase derivada
Super-clase → sub-clase

class Base ( object ):

def method ( self ):

print " base . method () "

def other ( self ):

print " base . other () "

class Deriv ( Base ):

def method ( self ):

print " deriv . method () "

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 2 Orientación a Objetos

Mayo de 2011

25 / 60

Herencia

Ejemplo ...

Substituibilidad ...

def i n v o c a _ m e t o d o ( obj ):

obj . metodo ()

obj = Base ()
obj . method ()
obj . other ()
i n v o c a _ m e t o d o ( obj )

obj = Deriv ()
obj . method ()
obj . other ()
i n v o c a _ m e t o d o ( obj )

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 2 Orientación a Objetos

Mayo de 2011

26 / 60

Recordemos: duck typing

Herencia

¡No hace falta herencia para tener substituibilidad!

invoca metodo depende de method no de Base

class Otra ( object ):

def method ( self ):

print " otra . method () "

obj = Otra ()
i n v o c a _ m e t o d o ( obj )

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 2 Orientación a Objetos

Mayo de 2011

27 / 60

Índice

Herencia múltiple

1 Objetos
2 Clases
3 Atributos
4 Encapsulación
5 Herencia
6 Herencia múltiple
7 Objetos ligeros
8 Métodos especiales

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 2 Orientación a Objetos

Mayo de 2011

28 / 60

Herencia múltiple

Herencia múltiple

Podemos heredar de varios padres

Sobrecarga

Abajo → arriba
Izquierda → derecha

Juan
  • Links de descarga
http://lwp-l.com/pdf10865

Comentarios de: Tema 2 Orientación a Objetos - Curso de Python Avanzado (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad