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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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