1. 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
2. Repaso
Tipos de datos inmutables
OOP en Python
Sintaxis de Python
Python posee una sintaxis bastante flexible, por lo cual, a
veces se pueden escribir onliners o código poco legible.
Para esto existen herramientas de checkeo de sintaxis
1 PEP8
2 PyFlakes
3 PyLint
Todos son configurables sobre que puede ser considerado mal
visto 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
3. Repaso
Tipos de datos inmutables
OOP en Python
Los tipo de datos inmutables son aquellos que no pueden cambiar
de valor a menos que se cree uno nuevo:
str Cadena, ej: ”Hola mundo!”
int y float Enteros ej: 42 0.3
NoneType representa el vacío None
bool solo existen dos instancias True y False
tuple las tuplas son colecciones ordenadas de objetos, por
ejemplo (1, 2, −2) ó ( Hola mundo , Python ) 1
1
Las tuplas además se usan para asignación múltiple y para retorno de
múltiple
Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
4. Repaso
Tipos de datos inmutables
OOP en Python
Tipos de datos mutables
set Representa un conjunto, donde no se pueden repetir
elementos.
list Una lista contiene cualquier tipo de elementos y es
diná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
5. Repaso Objetos
OOP en Python Metodos estáticos y de clase
En esta clase nos dedicaremos por enteros a OOP.
Refrescaremos conceptos ya vistos y conoceremos algunos
nuevos.
Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
6. Repaso Objetos
OOP en Python Metodos 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 alguna
relació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
7. Repaso Objetos
OOP en Python Metodos estáticos y de clase
Identidad
La identidad de un objeto nunca cambia una vez que ha sido
creado.
Para trabajar con la identidad, disponemos de la función id()
y del operador is.
Dos objetos diferentes pueden tener el mismo valor. Pero esto
depende de la implementación de Python que estemos usando.
Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
8. Repaso Objetos
OOP en Python Metodos estáticos y de clase
Tipo
El tipo de un objeto determina las operaciones que podemos
realizar sobre este, y también define el conjunto de valores que
puede adquirir.
La función type() devuelve el tipo del objeto.
Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
9. Repaso Objetos
OOP en Python Metodos 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 de
valor respectivamente.
La mutabilidad de un objeto queda definida por su tipo.
Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
10. Repaso Objetos
OOP en Python Metodos 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 mencionada
en la declaración de la clase hija.
Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
11. Repaso Objetos
OOP en Python Metodos estáticos y de clase
Polimorfismo
Polimorfismo es la capacidad que tiene un método de saber
actuar ante diferentes mensajes que puede recibir de otros
objetos 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
12. Repaso Objetos
OOP en Python Metodos estáticos y de clase
Sobrecarga de operadores
Python posee un conjunto especial de nombres de método que
serán llamados ante determinados operadores o funciones que se
apliquen sobre los objetos.
Estos métodos especiales nos permiten personalizar el
comportamiento del lenguage y ampliar de manera práctica las
posiblidades del mismo.
Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
13. Repaso Objetos
OOP en Python Metodos estáticos y de clase
Propiedades
En Python el acceso a los atributos tanto de una clase como de una
instancia se hace con el operador punto .
A veces es necesario controlar el acceso a ciertos atributos, por
ejemplo
from datetime import datetime
class Persona(object):
def __init__(self, nombre, nacimiento):
self.nombre = nombre
self.nacimiento = nacimiento
def edad(self):
’’’Retorna la edad de la persona’’’
return (datetime.today() -
self.nacimiento).days / 365
Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
14. Repaso Objetos
OOP en Python Metodos 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 :
@property
def edad(self):
’’’Retorna la edad de la persona’’’
return (datetime.today() - nacimiento) / 365
De esta manera podemos hacer
p = Persona("Eduardo", date(1976, 1, 4))
p.edad # en vez de p.edad()
2
El caracter @ se usa para decorar código
Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
15. Repaso Objetos
OOP en Python Metodos estáticos y de clase
Propiedades como getter/setter
Las propiedades se comportan como los getters/setters de otros
lenguajes y no es necesario cambiar la forma de acceso a los
atributos!
Supongamos que debemos controlar el valor con asignado a un
atributo de una instancia, en este ejemplo no hay control sobre los
valores:
class PuntoGeo(object):
def __init__(self, lat, lng):
’’’ Latitud y longitud ’’’
self.lat = lat
self.lng = lng
def __str__(self):
return "%.3f %.3f" % (self.lat, self.lng)
Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
16. Repaso Objetos
OOP en Python Metodos estáticos y de clase
Para definir el setter usamos el siguiente decorador:
_lat = None
@property
def lat(self):
return self._lat
@lat.setter
def 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 cuando
pedimos 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
17. Repaso Objetos
OOP en Python Metodos 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 instancia
como su primer argumento.
class A(object):
@classmethod
def metodo_de_clase(cls):
print "No necesito ser instanciado"
Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python
18. Repaso Objetos
OOP en Python Metodos estáticos y de clase
Métodos estáticos
Los métodos estáticos en Python son aquellos que no reciben
nada como primer argumento. Se comportan como funciones
bajo el ámbito de nombres de la clase.
class B(object):
@staticmethod
def metodo_estatico():
print "Soy una funcion comun "
"dentro de una clase"
Defossé Nahuel, Pecile Lautaro Curso de Introducción a Python