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
Comentarios de: Tema 2 Orientación a Objetos - Curso de Python Avanzado (0)
No hay comentarios