clase 3/4 curso introducción a python 2012

18
Repaso OOP en Python Curso de Introducción a Python Clase 3 Defossé Nahuel, Pecile Lautaro UNPSJB Septiembre 2012 Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python

Upload: nahuel-defosse

Post on 13-Jun-2015

403 views

Category:

Documents


1 download

DESCRIPTION

Curso de Introducción a Python de la UNPSJB

TRANSCRIPT

Page 1: Clase 3/4 Curso Introducción a Python 2012

RepasoOOP en Python

Curso de Introducción a PythonClase 3

Defossé Nahuel, Pecile Lautaro

UNPSJB

Septiembre 2012

Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python

Page 2: Clase 3/4 Curso Introducción a Python 2012

RepasoOOP en Python Tipos de datos inmutables

Sintaxis de Python

Python posee una sintaxis bastante flexible, por lo cual, aveces se pueden escribir onliners o código poco legible.Para esto existen herramientas de checkeo de sintaxis

1 PEP82 PyFlakes3 PyLint

Todos son configurables sobre que puede ser considerado malvisto y están integrados en varias IDEs como Spyder, PyDev,Eric, PyCharm, vim-python, etc.

Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python

Page 3: Clase 3/4 Curso Introducción a Python 2012

RepasoOOP en Python Tipos de datos inmutables

Los tipo de datos inmutables son aquellos que no pueden cambiarde valor a menos que se cree uno nuevo:

str Cadena, ej: ”Hola mundo!”int y float Enteros ej: 42 0.3NoneType representa el vacío Nonebool solo existen dos instancias True y Falsetuple las tuplas son colecciones ordenadas de objetos, porejemplo (1, 2,−2) ó (′Hola mundo ′,′ Python′) 1

1Las tuplas además se usan para asignación múltiple y para retorno demúltiple

Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python

Page 4: Clase 3/4 Curso Introducción a Python 2012

RepasoOOP en Python Tipos de datos inmutables

Tipos de datos mutables

set Representa un conjunto, donde no se pueden repetirelementos.list Una lista contiene cualquier tipo de elementos y esdinámica. Ej: [′a′, 1, 2]dict El diccionario es una tabla de asociación clave→valor.Ej:d = {’caballeros’:[’Arturo’, ’Lancelot’, ’Gallahad’],

’mosqueteros’:[’Aramis’, ’Athos’, ’Portos’]}

Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python

Page 5: Clase 3/4 Curso Introducción a Python 2012

RepasoOOP en Python

ObjetosMetodos estáticos y de clase

En esta clase nos dedicaremos por enteros a OOP.Refrescaremos conceptos ya vistos y conoceremos algunosnuevos.

Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python

Page 6: Clase 3/4 Curso Introducción a Python 2012

RepasoOOP en Python

ObjetosMetodos estáticos y de clase

Objetos

Los objetos son la abstracción de Python para los datos.Todo dato en Python está representado por un objeto o algunarelación entre dos o más objetos.Todo objeto posee una identidad, un tipo y un valor.

Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python

Page 7: Clase 3/4 Curso Introducción a Python 2012

RepasoOOP en Python

ObjetosMetodos estáticos y de clase

Identidad

La identidad de un objeto nunca cambia una vez que ha sidocreado.Para trabajar con la identidad, disponemos de la función id()y del operador is.Dos objetos diferentes pueden tener el mismo valor. Pero estodepende de la implementación de Python que estemos usando.

Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python

Page 8: Clase 3/4 Curso Introducción a Python 2012

RepasoOOP en Python

ObjetosMetodos estáticos y de clase

Tipo

El tipo de un objeto determina las operaciones que podemosrealizar sobre este, y también define el conjunto de valores quepuede adquirir.La función type() devuelve el tipo del objeto.

Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python

Page 9: Clase 3/4 Curso Introducción a Python 2012

RepasoOOP en Python

ObjetosMetodos estáticos y de clase

Valor

El valor de un objeto puede cambiar.Un objeto se denomina mutable o inmutable según cambie o no devalor respectivamente.La mutabilidad de un objeto queda definida por su tipo.

Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python

Page 10: Clase 3/4 Curso Introducción a Python 2012

RepasoOOP en Python

ObjetosMetodos estáticos y de clase

Herencia Múltiple

En Python, la herencia puede ser múltiple.En caso de que haya métodos con la misma signatura en los padres,tiene prioridad el perteneciente a la primera clase padre mencionadaen la declaración de la clase hija.

Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python

Page 11: Clase 3/4 Curso Introducción a Python 2012

RepasoOOP en Python

ObjetosMetodos estáticos y de clase

Polimorfismo

Polimorfismo es la capacidad que tiene un método de saberactuar ante diferentes mensajes que puede recibir de otrosobjetos o de sí mismo.Duck-typing (tipado de pato): “si flota como pato y hace’cuak!’ como un pato entonces es un pato” .

Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python

Page 12: Clase 3/4 Curso Introducción a Python 2012

RepasoOOP en Python

ObjetosMetodos estáticos y de clase

Sobrecarga de operadores

Python posee un conjunto especial de nombres de método queserán llamados ante determinados operadores o funciones que seapliquen sobre los objetos.Estos métodos especiales nos permiten personalizar elcomportamiento del lenguage y ampliar de manera práctica lasposiblidades del mismo.

Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python

Page 13: Clase 3/4 Curso Introducción a Python 2012

RepasoOOP en Python

ObjetosMetodos estáticos y de clase

Propiedades

En Python el acceso a los atributos tanto de una clase como de unainstancia se hace con el operador punto .A veces es necesario controlar el acceso a ciertos atributos, porejemplofrom datetime import datetime

class Persona(object):def __init__(self, nombre, nacimiento):

self.nombre = nombreself.nacimiento = nacimiento

def edad(self):’’’Retorna la edad de la persona’’’return (datetime.today() -

self.nacimiento).days / 365Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python

Page 14: Clase 3/4 Curso Introducción a Python 2012

RepasoOOP en Python

ObjetosMetodos estáticos y de clase

Propiedaes

Sería desable acceder a la edad como si se tratase de un atributo,aunque deba calcularse. Para esto podemos usar una propiedad 2 :

@propertydef edad(self):

’’’Retorna la edad de la persona’’’return (datetime.today() - nacimiento) / 365

De esta manera podemos hacerp = Persona("Eduardo", date(1976, 1, 4))p.edad # en vez de p.edad()

2El caracter @ se usa para decorar códigoDefossé Nahuel, Pecile Lautaro Curso de Introducción a Python

Page 15: Clase 3/4 Curso Introducción a Python 2012

RepasoOOP en Python

ObjetosMetodos estáticos y de clase

Propiedades como getter/setter

Las propiedades se comportan como los getters/setters de otroslenguajes y no es necesario cambiar la forma de acceso a losatributos!Supongamos que debemos controlar el valor con asignado a unatributo de una instancia, en este ejemplo no hay control sobre losvalores:class PuntoGeo(object):

def __init__(self, lat, lng):’’’ Latitud y longitud ’’’self.lat = latself.lng = lng

def __str__(self):return "%.3f %.3f" % (self.lat, self.lng)

Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python

Page 16: Clase 3/4 Curso Introducción a Python 2012

RepasoOOP en Python

ObjetosMetodos estáticos y de clase

Para definir el setter usamos el siguiente decorador:

_lat = None@propertydef lat(self):

return [email protected] lat(self, value):

if not -90 <= value <= 90:raise ValueError("Valor fuera de rango"

": %s" % value)self._lat = value

De esta manera accedemos al primer método como getter cuandopedimos la latitud y al segundo cuando se la asignamos.No es necesario usar setLat(valor)

Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python

Page 17: Clase 3/4 Curso Introducción a Python 2012

RepasoOOP en Python

ObjetosMetodos estáticos y de clase

Métodos de clase

En Python los atributos estáticos se definen con el decorador@classmethod , estos reciben la clase en vez de la instanciacomo su primer argumento.class A(object):

@classmethoddef metodo_de_clase(cls):

print "No necesito ser instanciado"

Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python

Page 18: Clase 3/4 Curso Introducción a Python 2012

RepasoOOP en Python

ObjetosMetodos estáticos y de clase

Métodos estáticos

Los métodos estáticos en Python son aquellos que no recibennada como primer argumento. Se comportan como funcionesbajo el ámbito de nombres de la clase.class B(object):

@staticmethoddef metodo_estatico():

print "Soy una funcion comun ""dentro de una clase"

Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python