SlideShare une entreprise Scribd logo
1  sur  131
Télécharger pour lire hors ligne
Introducción a Python v.1.1.2
Cristian González García
Departamento de Informática
Universidad de Oviedo
Contenidos
• Introducción: Python, Ecosistema, Usado por..., Python 3 vs Python 2
• Instalación: Instalación, Pruebas Unitarias
• Conceptos Básicos
• Sintaxis Básica
• Estructuras de Control
• Funciones
• Estructuras de Datos: Listas, Del, Tuplas, Sets, Diccionarios
• Módulos
• Paquetes
• Input and Output: Ficheros, JSON
• Errores y Excepciones: Syntax Errors, Exceptions
• Clases
• Características, Clases, Data Attributes, Métodos, Class and Instance Variables , Herencia, Herencia
Múltiple, Privacidad, Excepciones, Iteradores, Generadores, Constantes, Métodos estáticos,
Métodos abstractos, Métodos estáticos abstractos,
• Duck Typing
• Otros: Crear ejecutable para Windows
• Técnicas Web: Flask, Django, Otros
• Referencias: Libros
INTRODUCCIÓN
Python
• Creado en 1991 por Guido van Rossum
• Multiparadigma: Imperativo, Funcional y
Orientado a Objetos
• Tipado dinámico y fuerte
• Interpretado
• Multiplataforma
• Influencias
• Java, Haskell, Lisp, Perl
Guido van Rossum
Fuente: http://commons.wikimedia.org/wiki/File:Guido_van_Rossum_OSCON_2006.jpg
Python is a programming language that lets you work quickly
and integrate systems more effectively – Python.org
Ecosistema I
• Página: https://www.python.org/
• Implementaciones
• CPython (C) – Oficial
• IronPython (C#)
• Jython (Java)
• CLPython (Lisp)
• PyPy
• Versiones en funcionamiento
• 2.7.X (2010)
• 3.4.X (2014)
Ecosistema II
• Intérprete interactivo: python
• Gestión de paquetes
• pip (https://pypi.python.org/pypi)
• Documentación: https://www.python.org/doc/
• Entorno desarrollo
• Extensión Eclipse: Aptana
• PyCharm de JetBrains
Usado por … I
• Youtube
• Sitio web: rapidez de siti oy de desarrollo
• Industrial Light & Magic
• Procesamiento de Star Wars Episodio II (renderizado)
• Otras aplicaciones
• Google
• Sitio web desde los inicios
• Journyx
• Sitio web más rápido que sus competidores
• Desarrollan 10 veces más rápido que en Java y 100 que en C
• IronPort
• Productos de seguridad y servicios para empresas
• Más de 1 millón de líneas de Python
• EVE Online
• Juego multijugador masivo (MMORPG)
• Más de 50.000 jugadores simultáneos
• Rapidez de desarrollo de todo el juego y su flexibilidad
Usado por … II
• HomeGain
• Búsqueda de casas
• Mejora continua rápida
• Conciso, sintaxis clara y poderosa biblioteca
• Thawte Consulting
• Autoridad certificadora (5ª del mundo) de certificados
• Productivo y gran mantenimiento de código
• University of Maryland
• Estudiantes de Web Semántica
• Flexibilidad y el gran número de bibliotecas
• EZTrip.com
• Agencia de viajes
• Rápido desarrollo desde que lo incorporaron (días y no meses)
• RealEstateAgent.com
• Agencias de casas (venta, alquiler, …)
• Aplicaciones rápidas y compenentes con recursos mínimos
• Es un lenguaje crítico para ellos en su clúster
• Firaxis Games
• Empresa de videojuegos (Civilization, XCOM)
• Herramienta de mods, pantallas de juego, interfaces, …
• Lenguaje de Scripting, recolector de basura, desarrollo más rápido que en C++, ..
Python 3 vs Python 2
• “Python 2.x is legacy, Python 3.x is the present and future of the
language” - Python.org
• Python 2
• Ya no recibe actualizaciones mayores
• Muchos problemas con las codificaciones
• Muchas librerías creadas en Python 2 y sin portar a Python 3
• Herramienta para ayudar a portar el código: 2to3
(https://wiki.python.org/moin/2to3)
• Python 3
• Ofrece un soporte correcto a las codificaciones. Por defecto, todo es
Unicode (UTF-8)
• No es retro-compatible
• Cambios en algunas funciones/clases
• Más eficiente con la memoria
• Aún no están todas las librerías portadas
• Mejoras en el Core (funciones, librerías, rendimiento, excepciones, …)
• Herramienta para ayudar a portar el código: 3to2
(https://wiki.python.org/moin/3to2)
INSTALACIÓN
Instalación I
• https://www.python.org/downloads/
Descargamos la
versión 3.4
Instalación II
• Una vez descargado, ejecutamos el instalador
Siguiente
Instalación III
• Seleccionamos la carpeta de la instalación
Siguiente
Instalación IV
• Seleccionamos lo que deseamos instalar
Instalación V
• Esto nos instalará Python en el path
Seleccionar
Siguiente
Instalación VI
• Esperamos… Y finalizará solo
Instalación VII
• Abrimos un nuevo terminal o lo reiniciamos
• Comprobamos que tenemos Python
• Comando: python
• Muestra la versión de Python
• Abre el Intérprete Interactivo
Instalación VIII
• Abrimos el CMD
• Miramos los paquetes instalado
• pip freeze
• Esta vacío pues no instalamos ningún
paquete
• Para instalar un paquete
• pip install nombreDelPaquete
Instalación IX
• Instalamos el framework flask
• pip install flask
• Comprobamos los paquetes
Pruebas Unitarias I
• Unittest
• Antiguo PyUnit
• Similar a xUnit: JUnit, PHPUnit,…
• Flujo de trabajo
• Importar “unittest”
• Crear una clase que herede de
“unittest.TextCase”
• Crear funciones que comiencen por “test_”
• Ejecutar las pruebas utilizando unittest.main()
Pruebas Unitarias II
• Métodos autollamados
• setUp(self): Antes de ejecutarse un test
• tearDown(self): Después de ejecutarse un test
• Métodos disponibles
• assertEqual, assertRaises, assertFalse, assertTrue,
assertDictEqual, assertIsInstance, asserIsNone, …
• __main___
• Variable que se crea cuando se ejecuta el módulo
como programa principal. Con el “if”, se evita
que se ejecute ese código si se importa en otro
Pruebas Unitarias III
Pruebas Unitarias IV
CONCEPTOS BÁSICOS
Conceptos básicos
• Lenguaje Multiparadigma
• Imperativo, Funcional y Orientado a Objetos
• Todo son Objetos
• No hay tipos primitivos
• Esto proporciona que todo tenga métodos
Tipado dinámico
• No se declara el tipo de la variable
• La variable puede tomar diferente tipo en
distintos momentos
• Permite mayor flexibilidad
• Chequeo de tipos en tiempos de ejecución
• Errores en tiempo de ejecución
http://stackoverflow.com/questions/125367/dynamic-type-languages-versus-static-type-languages
http://www.smashingmagazine.com/2013/04/18/introduction-to-programming-type-systems/
Fuertemente Tipado
• Permite algunas operaciones entre
parámetros de tipo similar (numérico)
• Int con Float, Int con Complex, …
• No permite operaciones entre números y
cadenas
SINTAXIS BÁSICA
Sintaxis básica
• ; - Opcional, salvo si hay varias sentencias en la misma línea
• () - Opcionales en las estructuras de control
• Requiere identación obligatoria
• 4 espacios (recomendado) ó 1 tabulador
• Mismo tipo de identación elegida en todo el documento
• Los IDEs lo suelen automatizar
• Comentario #:
• # Esto es un comentario de una línea
• Antes de la almohadilla hay que dejar dos espacios y detrás uno: 2*espacios#espacio
• Comentario multilínea
• “““ Comentario multilinea ”””
• Nombrado
• Funciones: snake_case (nombre_de_la_funcion_o_variable) y empieza por minúscula
• Variables: snake_case (nombre_de_la_funcion_o_variable)
• Clases: CamelCase (NombreDeLaClase) y empieza por mayúscula
• Booleanos: “False” y “True”
• Negación: “not”. Es similar al “!” de otros lenguajes
• El valor nulo es “nil” en vez de null
• Algo sin valor es “None”
ESTRUCTURAS DE CONTROL
Condicional - if
• if…elif…elif[…else]
• elif = else if
• else: opcional
• Si no existe y debiera entrar, el programa continua sin
realizar ninguna acción
Bucle – for
• Es diferente al bucle clásico
• Itera sobre los elementos de secuencias
(listas, cadenas, …) siguiendo el orden
Range
• Función que permite iterar sobre una
secuencia de números
• Genera progresiones aritméticas
break, continue
• break
• Igual que en C y Java
• Rompe el bucle
• continue
• Igual que en C y Java
• Salta a la inmediatamente a la siguiente iteración
else
• Los bucles “for” pueden incorporar la
sentencia “else”
• Se ejecuta
• Cuando termina de iterar
• Cuando hay un “continue”
• No se ejecuta
• Cuando termina con un “break”
pass statements
• Esta sentencia no hace nada
• Se utiliza cuando se requiere una declaración
sintáctica pero en la que aun no queremos
realizar ninguna acción o rellenar
Ejercicio: Par - Factorial
• https://gist.github.com/gonzalezgarciacristian
/bd448626508198c83645
• even(n): chequea que un nº es par
• Devuelve True/False
• factorial(n): calcula el factorial de un nº
• No utilizar la librería math
• Devuelve el factorial
FUNCIONES
Funciones I
• Se utiliza la palabra reservada “def”
• Debe haber dos líneas de separación entre funciones
• La primera línea puede ser la descripción
• Utilizada por herramientas de documentación
• Pasa los valores por
copia, como en Java
Funciones II
• Permite guardar funciones en variables
• Sirve para crear alias de la función
• Las funciones retornan “None”
• Por convenio
• Si no tienen retorno
• Si la función termina antes de
llegar al retorno
Parámetros por defecto I
• Se pueden crear parámetros con valores por
defecto
• Si se asigna un parámetro por defecto, han de
asignarse los siguientes (Definición y llamada)
Parámetros por defecto II
• El valor por defecto, en caso de
coincidir, lo coge de la variable global
en dicho punto de la ejecución,
aunque después cambie
• Si el valor por defecto es mutable, en
el caso de listas, diccionarios o clases,
este se acumulará
• Para evitar esto hay que utilizar
“None”
Keyword Argument
• Se pueden pasar los parámetros a las
funciones utilizando el nombre del parámetro
• Permite utilizar algunos valores por defecto
• Si los utilizamos, deberemos especificar todas
las que no vayan en orden
Arbitrary Argument Lists
• Como parámetro, generalmente el final, se
puede crear una lista de argumentos
arbitrarios
• Esta lista envuelve en una tupla todos los
argumentos restantes pasados a la función
Unpacking Argument Lists
• Permite enviar elementos en tuplas, listas y
diccionarios
• Estos pueden ser automáticamente procesados,
pero hay que especificarlo
• *arg: lista o tupla
• **arg: diccionario
Lambda Expressions
• Azúcar sintáctico de una función normal
• Se crean utilizando la palabra reservada “lambda”
• También conocidas como funciones anónimas, clausuras o
funciones Lambda
• Sirven para ser pasadas como argumento o devolver el
resultado de una función sencilla sin necesidad de definirlas
completamente
Documentación
• Existe una convención para la documentación
• 1ª línea debe ser un resumen corto
• Comienza en mayúscula y termina en punto
• 2ª línea debe ser una línea en blanco
• 3ª en adelante: Información
ESTRUCTURAS DE DATOS
Listas I
• Se instancian vacías con: []
• Se pueden instanciar con datos: [3, 4, 5]
• Métodos
• append(x), extend(list), insert(i, x), remove(x),
pop([i]), clear(), index(x), count(x), sort(),
reverse(), copy()
• Insert, remove y sort devuelven “None”
• Principio de diseño para todas las estructuras
mutables en Python
Listas II - Pilas
• Último en entrar, primero en salir
• Usando los métodos
• append(x): añadir elemento
• pop(): sacar último elemento
Listas III - Colas
• Primero en entrar, primero en salir
• Las listas no son eficientes para esto
• Añadir y sacar del final es rápido
• Añadir y sacar del principio es lento: tiene que
mover todos los elementos uno a uno
• Hay que utilizar collections.deque
Listas IV – Comprehensions
• Azúcar sintáctico para crear listas
• Crear listas donde cada miembro es el
resultado de una condición
• Consiste en una expresión seguida de una
cláusula
Ejercicio: Números primos
• https://gist.github.com/gonzalezgarciacristian/0
023aeb4e3b98edc5a2d
• is_prime(n): dice si un número es primo o no
• Devuelve True/False
• obtain_prime_factors(n): calcula los factores
primos de n
• Devuelve una lista con los factores primos
• n = 0 -> []
• n = 1 -> [1]
• n > 1 -> [1, …]
Del statement
• Sentencia que permite
• Borrar uno o más elementos de una lista
• Borrar toda la lista
• No devuelve el valor, algo que si hace .pop([i])
Tuplas I
• Valores separados por coma (,)
• (1, 2); (3, ‘a’); ([4, 5], “Hello”, 5); …
• Puedes anidarse (contener tuplas)
• Son inmutables (no se pueden modificar una vez
creadas)
• Pueden contener múltiples objetos
Tuplas II
• Pueden contener elementos mutables, como listas
• Se instancian
• Tupla vacía: ()
• Tupla 1 o más elementos separados por: ,
• Para desempaquetar una tupla, hay que asignar
tantas variables como posee. Si no, error
Sets I
• Colección de elementos no duplicados desordenados
• Se instancian con
• Vacío: set()
• Con un solo elemento iterable (strings, listas, …): set(x)
• Con elementos: {x, y, z}
Sets II
• Soporta operaciones matemáticas
• Unión, intersección, diferencia, diferencia
simétrica
• Soportan “list comprehensions”
Diccionarios I
• En otros lenguajes son similares a los “associative
memories”, “associative arrays” o “hash table”
• Son un set desordenado compuesto por clave-valor
• Indexan usando las claves (“keys”)
• Elementos inmutables: Números, strings o tuplas
• Tuplas: sólo si contienen números, strings o tuplas
• Las claves son únicas
• Se instancian con
• Vacío: {}
• Datos: {clave: valor} -> {‘Lerdorf’: 2, ‘Matsumoto’: 3}
Diccionarios II
• Los datos se extraen a partir de su clave
• Si no existe la clave, excepción “KeyError”
• Borrado de datos utilizando “del” y su clave
• Si se almacena sobre una clave existente, se
sobrescribe el valor
Diccionarios III
• Utilidades
• .keys(): devuelve una tupla con las claves
• list(dicc.keys()): obtenemos una lista con las
claves desordenadas
• sorted(list(dicc.keys())): obtenemos una lista
ordenada de las claves
• x in dicc: comprueba que x existe en dicc
Diccionarios IV
• Otras formas de crearlos
• Secuencias clave-valor
• “Comprehensions”
• “Keyword arguments”
Ejercicio: Diccionarios
• https://gist.github.com/gonzalezgarciacristian/1bee12
16a4917f577e03
• Crear función “calculate_notes”
• Recibe 2 diccionarios
• solutions = {id_question: answer} -> {1: ‘a’}
• students_anserws
• {id_student: {id_question : student_answer}}
• {1: {1: 'a', 2: 'a'}}
• Debe
• Iterar los diccionarios y calcular la nota por alumno
• Acierto: +1; Fallo: -0.25
• Retorna un diccionario
• {id_student: note} -> {1: 0.75}
MÓDULOS
Módulos I
• Archivo que contienen definiciones y sentencias
de Python
• Permiten
• Dividir el código en varios archivos
• Reutilizar código
• Organizar las funciones
• El nombre del módulo es el nombre del archivo +
.py
• Se importa con la sentencia import
• Se puede obtener el nombre del módulo con el
método: __name__
Módulos II
• Hay dos formas de importarlos
• import “moduleName”
• Menos sentencias “import”, pues trae todo el módulo
• Hay que escribir el nombre del módulo delante para
acceder a él
• from “moduleName” import “functionality”
• No hay que escribir el nombre del módulo delante de
la funcionalidad
• Mayor control sobre lo que se carga de cada módulo
• Para nuevas funcionalidades que se usen, hay que
actualizar los “import”
• Menos verboso y menos legibilidad
Módulos III
• import “moduleName”
• from “moduleName” import “functionality”
Módulos IV
• Es posible crear un nombre local con la
función del módulo
INPUT AND OUTPUT
Ficheros I
• open(filename, mode)
• retorna un objeto de tipo “file”
• filename: nombre del fichero
• mode: modo de apertura
• Se pueden juntar: r+, w+, a+, rb, wb, …
Modo Significado
'r' Lectura (por defecto)
'w' Escritura desde el principio del fichero
'x' Abrir creando el fichero, falla si ya existe
'a' Escritura desde el final del fichero
'b' Modo binario
't' Modo texto (por defecto)
'+' Lectura y escritura
'U' (Obsoleto)
Ficheros II - Escritura
• Se utiliza el método open(filename, mode)
• mode
• w: escritura desde principio del fichero
• w+: escritura y lectura desde principio del fichero
• a: escritura desde final del fichero
• a+: escritura y lectura desde final del fichero
• .write(string): graba en el fichero
• Otros tipos de datos hay que convertirlos a string
Ficheros III – Lectura I
• Se utiliza el método open(filename, mode)
• mode
• r: lectura del fichero
• r+: lectura y escritura
• rb: lectura del fichero en modo binario
• rb+: lectura y escritura en modo binario
• .read(): lee todo el fichero
• .readline(): lee las líneas de una en una
Ficheros III – Lectura II
• .readlines() / list(fileObject): devuelve una
lista con todas las líneas
Ficheros IV – Otros métodos
• .tell(): posición del puntero representado
como el nº de bytes
• .seek(offset, from_what): cambia la posición
del puntero
• offset: nueva posición
• from_what: desde donde se calcula
• 0: Principio; 1: Posición actual; 2: Final de fichero
• .close(): cierra el fichero
Ficheros V – Otros I
• with: palabra clave para abrir los ficheros y
que se encarga de cerrarlo al terminar
aunque haya un error
• .closed: booleano que indica si esta cerrado el
fichero
JSON - Escritura
• Hay que importar la librería JSON
• .dump(x, file): graba al fichero los datos x
JSON Python
object dict
array list
string unicode
number (int) int, long
number (real) float
true True
false False
null None
• Tabla de equivalencias ->
JSON – Lectura
• .load(file): deserializa el documento
• file: fichero ya abierto para lectura
• .dumps(data, sort_keys, indent): muestra
en formato JSON los datos. Tiene más
parámetros
• data: datos
• sort_keys: ordenar salida por clave
• indent: indenta el código tantos espacios
como se indique
ERRORES Y EXCEPCIONES
Syntax Errors
• Errores comunes cuando se programa
• Sintaxis incompleta o incorrecta
• Un IDE ayuda con estos errores
Exceptions I
• La sintaxis es correcta pero falla algo
• Son errores en tiempo de ejecución
• Pueden romper el programa si no se tratan
• Jerarquía de excepciones:
https://docs.python.org/3/library/exceptions.
html
• Se pueden definir excepciones propias
Exceptions II
• Para tratar excepciones debemos usa rla
cláusula “try-except”
• El contenido de “try” será ejecutado
• Si el “try” falla, se ejecuta inmediatamente el
“except”, obviando el resto del “try”
• Si el “try” no falla, se ejecuta entero y no se
ejecuta el “except”
Exceptions III
• En el “except” se ejecuta la cláusula que
coincida con el tipo de excepción lanzada en
el “try”
• Si en el “except” no se encuentra una cláusula
válida, el programa fallará
• Ctrl-C finaliza la ejecución y es una excepción
de tipo “KeyboardInterrupt”
Exceptions III
• “except” puede soportar varios tipos de error a la vez
• Puede tener un valor asociado
• “except:” reenvia la excepción a otro nivel
• Cuidado, puede enmascarar errores
• Se puede utilizar para errores personalizados
Exceptions IV
• “try-except” soporta opcionalmente la
clausula “else”
• “else” se ejecutará siempre que se ejecute el
“try” al completo
Exceptions V
• El valor asociado a una excepción es un
objeto
• Este tiene distintas propiedades
• Tipo de error
• Argumentos
• Dependen del tipo de excepción
• Son una tupla
PAQUETES
Paquetes I
• Forma de estructurar los módulos
• Permite agrupar los módulos por
funcionalidades similares
• Ayuda a evitar colisiones entre diferentes
módulos (variables, nombres, …)
• Contienen un archivo __init__.py
• No confundir con los directorios
Paquetes II
• Se accede utilizando el “.”
• packageA.moduleB: Módulo “moduleB” del
paquete “packageA”
• Desde Python 3 se recomienda, aunque funciona
sin utilizarlo
Paquetes III
• __init__.py
• Convierte un directorio en un paquete
• Evita así que un directorio oculte un paquete o
fichero .py debido al nombre
• Por defecto estará vacío
• Puede contener “imports” que se aplicarán a sus
módulos
• Ayuda en su simplifación
• No se recomienda por que peude tener efectos
secundarios
• Es usado por los frameworks para cargar módulos
que necesitan de una manera fácil para el
desarrollador
CLASES
Características
• Todo hereda de Object
• En Python 3 no hace falta especificarlo, en Python 2 si
• Son objetos
• Se pueden renombrar, importar,…
• Se utiliza “self” como acceso a todo (métodos y funciones)
• Tienen herencia múltiple
• Se crean en tiempo de ejecución
• Se pueden modificar en tiempo de ejecución
• Por defecto
• Todo es público, no existe encapsulación
• Las funciones son virtuales (sobrescribibles por polimorfismo
en sus clases derivadas)
• Hay sobrecarga de operadores (__add__, __mul__, …)
Clases I
• Definición: “class nombre:”
• Esto crea la definición de un “namespace”
• Soportan dos operaciones
• Referencia de atributos: acceso a sus métodos y
variables utilizando el operador “.”
• Instanciación de la clase: crea un objeto de ese tipo
Clases II
• Por defecto, tienen un constructor vacío
• Al instanciarlas, se auto llama al método
__init__(self)
• Para crear uno, debemos de sobrescribir el
método __init__(self)
• Solo pueden tener un constructor
Clases III
• Si queremos tener “varios
constructores”, hay que
utilizar
• Parámetros por defecto
• None: para evitar problemas
con objetos mutables (listas,
diccionarios, clases)
• Keyword arguments
Data Attributes
• No hace falta declarar las variables de clase
• Estas se crean la primera vez que se utilizan
• Pero a nivel de instancia, no de clase
• Pueden ser borrados con “del”
Métodos
• Son funciones que pertenecen a un objeto
• Siempre reciben el propio objeto como
primer argumento (self)
• Se llama “self” por convención
• Los métodos son almacenables en variables
Class and Instance Variables I
• Instance variable: variable compartida por
esa instancia
• Class variable: variable compartida por todas
las instancias. Son modificables. Se autocrean
Class and Instance Variables II
• Instance variable
• Cuidado con los objetos mutables (listas y diccionarios)
• Estos se comportarían como una variable estática
• Es accesible para todas las instancias
Ejercicio: Clases
• https://gist.github.com/gonzalezgarciacristian/9
0aafd11828f013bc0d6
• Crear una clase “Team”
• Tiene una lista de jugadores
• Puede tener un entrenador, o no
• Crear clase “Player”
• Tiene atributos “name” y “number”
• Método __str__()
• Crear clase “Coach”
• Tiene un atributo “name”
Herencia I
• Se pasa la clase padre entre paréntesis
• Estas pueden estar en otros módulos
• Importarlo
• Referenciarlo (depende del tipo de “import”)
Herencia II
• Hay que llamar al constructor padre
explícitamente para obtener sus valores
Herencia III
• super().__init__(): Calcula automáticamente
el padre
• Class.__init__(): Se especifica el constructor
Herencia IV
• Primero busca en la
clase hija (método,
variable), si no lo
encuentra, busca en el
padre
• Todos los métodos son
virtuales
Herencia V
• isinstance(obj, class)
• obj: instancia a comprobar
• class: clase sobre la que se comprueba el obj
• issubclass(sonClass, baseClass)
• sonClass: clase hija que se quiere comprobar
• baseClass: clase sobre la que se comprueba
Ejercicio: Herencia
• https://gist.github.com/gonzalezgarciacristian/1bb60b6bb573c3155428
• Crear “Figure “
• Métodos de “Figure”
• area: no hace nada
• areas: calcula el area total de una lista de figuras
• are_archenemy: comprueba si dos figuras son del mismo tipo
• “Square” y “Circle”
• Heredan de “Figure”
• Crear constructors con sus atributos
• Sobreescribir método “area”
• Para el círculo usad “math.pi”
• “Square”
• Dos atributos: “width” y “height”
• “Circle”
• Un atributo: “radio”
Herencia múltiple
• Se pasan la clases padre entre paréntesis
• Preferencia de izquierda a derecha
• Todas las clases heredan de Object
• Más información:
https://www.python.org/download/releases/2.3/mro/
Herencia múltiple II
• Si especificamos el padre, deberemos de
hacerlo en todos los métodos que deseemos,
si no, funciona de izquierda a derecha
Privacidad I
• Python no tiene encapsulación
• Python consigue la encapsulación mediante la
convención de nombres
• _name: Privado aunque accesible
• __name: Anti colisiones entre métodos heredados
• Obliga a especificar el nombre de la clase que lo
implementa (mangling): _Classname__name()
• __name__: Elimina el mangling y evita tener que
especificar el nombre de la clase
• https://docs.python.org/3/tutorial/classes.html#priv
ate-variables
Privacidad II
Excepciones I
• La clase debe heredar de “Exception”
• Se lanzan con
• raise Class: Lanza una excepción de esa clase
• raise Instance: Lanza una excepción del tipo de
esa instancia
Excepciones II
• “except” puede capturar nuestra excepción
• Tiene prioridad siempre la excepción de la
clase padre
Iteradores I
• El “for” utiliza iteradores
• Contiene el método __next__(self)
• Contiene la lógica de como iterar esos tipos de
objetos
• Cuando no hay elementos, lanza la excepción
“StopIteration”
Iteradores II
• Para crear un objeto iterable
• Implementar el método __iter__(self)
• Definir el comportamiento en __next__(self)
• Lanzar la excepción “StopIteration” para evitar el error:
“IndexError: string index out of range”
Generadores I
• Herramienta para crear iteradores
• Los iteradores pueden hacer lo mismo que los
generadores
• Se crean con la palabra reservada “yield”
• Diferencias con los iteradores
• Autocrea el __iter__(self)
• Autocrea el __next__(self)
• Se encargan de la excepción “StopIteration”
Generadores II
Constantes
• No hay constantes de clase de forma nativa
• Hay formas de simularlas
• Excepciones
• Método que devuelva un valor
Métodos estáticos
• Aquellos métodos que no utilizan ninguna
variable o método de la instancia (self)
• No llevan el atributo “self”
• Se marcan con “@staticmethod”
Métodos abstractos
• Módulo: abstract base classes
(ABCs)
• Hay que marcar el método
requerido
• @abc.abstractmethod
• La clase padre no se podrá
instanciar, pues será abstracta
• Las clases hijas
• Tendrán un warning si no lo
implementan
• TypeError: Can't instantiate
abstract class Duck with
abstract methods talk
Métodos estáticos abstractos
• El padre
• Debe marcar el método
con
• @staticmethod
• @abc.abstractmethod
• El hijo
• Debe implementar el
método
• Debe marcarlo con
“@staticmethod”
DUCK TYPING
Duck Typing I
• “Cuando veo un ave que camina como un pato, nada
como un pato y suena como un pato, a esa ave yo la
llamo un pato” – Davis, Robin S.
• El conjunto de métodos y propiedades del objeto
determina su tipo, en vez de la herencia
• Permite polimorfismo sin herencia
• El estado dinámico del objeto determina las
operaciones que este puede realizar y no su herencia
• Si posee un método lo ejecuta
• Si no, lanza una excepción AttributeError
• Se evita hacer comprobaciones de instancia
(isinstance()) y de tipo (type())
• “Es mas fácil pedir perdón que pedir permiso”
Duck Typing II
• De esta manera, una función puede recibir un
objeto y ejecutar lo que deba, en el caso de que
el objeto pasado no pueda, se lanza el error
• Recae en el programador el pasar el objeto
adecuado
• Mejor conocimiento del programa
• Buenas prácticas de programación
• Excepciones
• Pruebas
• “Si camina como un pato y nada como un pato,
podría ser un dragón imitando a un pato”
Duck Typing III
OTROS
Crear ejecutable para Windows
• Hay que utilizar la herramienta py2exe
• Solo disponible actualmente para Python 2
• http://www.py2exe.org/
• Para Python 3 está en desarrollo
• https://pypi.python.org/pypi/py2exe/0.9.2.0
• Pasos
TÉCNICAS WEB
Flask
• Microframework ligero para aplicaciones web
• Modularizado
• Muchos módulos para extenderlo
• BBDD de objetos, validación de formularios, autenticación…
• Escrito en Python
• Utiliza el motor de plantillas Jinja2
• Crear/Generar HTML por código
• Licencia BSD
• Uso comercial, modificable, distribuible, se puede sublicenciar y dar garantía
• Multiplataforma
• RESTful
• Contiene servidor (puerto 5000) y modo de depuración
• Soporte integrado para test unitarios
• Tiene implementado un sistema de cookies seguras
• 1 de abril de 2010 – 14 de Junio de 2013 (Última release)
• http://flask.pocoo.org/
Django
• La “D” es muda
• Framework de código abierto
• Escrito en Python
• Arquitectura Modelo-Vista-Controlador
• Utilizado por: Pinterest, Instagram, Mozilla, …
• Utiliza su propio motor de plantillas
• Crear/Generar HTML por código
• Posee un framework para la caché
• Sistema de internacionalización
• Soporte integrado para test unitarios
• Licencia BSD
• Uso comercial, modificable, distribuible, se puede sublicenciar y dar garantía
• Multiplataforma
• Contiene servidor (puerto 8000) y modo de depuración
• Mantenido por la Django Software Foundation
• Integración en diferentes IDE: Aptana, PyCharm, Eclipse,…
• 21 de Julio del 2005 – 2 de Septiembre del 2014 (Última release)
• https://www.djangoproject.com/
Otros
Framework Versión Estable Actual Fecha de última release Licencia
BlueBream 1.0 2011-01-18 ZPL
CherryPy 3.2.2 2011-10-28 BSD
CubicWeb 3.15.2 2012-07-24 LGPL
Django 1.7 2014-09-02 BSD
Flask 0.10.1 2013-06-14 BSD
Grok 1.4 2011-04-04 ZPL
Nagare 0.4.1 2012-01-18 BSD
Pyjamas 0.8 2012-06-01 Apache
Pylons 1.0.1 2012-08-14 BSD
Pyramid 1.5 2014-04-08 BSD
TACTIC 4.0 2013-05-07 EPL
Tornado 3.1.1 2013-09-01 Apache
TurboGears 2.3.3 2014-07-07 MIT, LGPL
web2py 2.9.5 2014-03-16 LGPL3
Webware 1.1 2011-08-03 Python
Zope 2 2.13.15 2012-06-22 ZPL
REFERENCIAS
Libros

Contenu connexe

Tendances (20)

Busqueda Binaria
Busqueda BinariaBusqueda Binaria
Busqueda Binaria
 
Poo 3 herencia
Poo 3 herenciaPoo 3 herencia
Poo 3 herencia
 
Ventajas y desventajas de las bdoo
Ventajas y desventajas de las bdooVentajas y desventajas de las bdoo
Ventajas y desventajas de las bdoo
 
Manejo de archivos en c++
Manejo de archivos en c++Manejo de archivos en c++
Manejo de archivos en c++
 
Pilas en Java
Pilas en JavaPilas en Java
Pilas en Java
 
Metodos de ordenamiento
Metodos de ordenamientoMetodos de ordenamiento
Metodos de ordenamiento
 
Bucket sort
Bucket sortBucket sort
Bucket sort
 
Algoritmos de Ordenamiento externo
Algoritmos de Ordenamiento externoAlgoritmos de Ordenamiento externo
Algoritmos de Ordenamiento externo
 
Diagramas uml
Diagramas umlDiagramas uml
Diagramas uml
 
Informe Proyecto Final
Informe Proyecto FinalInforme Proyecto Final
Informe Proyecto Final
 
java (clases,herencias,encapsulamiento,.. )
java (clases,herencias,encapsulamiento,.. )java (clases,herencias,encapsulamiento,.. )
java (clases,herencias,encapsulamiento,.. )
 
1.1 tda
1.1 tda1.1 tda
1.1 tda
 
Mergesort
MergesortMergesort
Mergesort
 
PRESENTACIÓN RUP
PRESENTACIÓN RUPPRESENTACIÓN RUP
PRESENTACIÓN RUP
 
Heap sort
Heap sortHeap sort
Heap sort
 
GRAFOS
GRAFOSGRAFOS
GRAFOS
 
Ordenamiento QuickSort
Ordenamiento QuickSortOrdenamiento QuickSort
Ordenamiento QuickSort
 
Pasteleriabasededatos
PasteleriabasededatosPasteleriabasededatos
Pasteleriabasededatos
 
Pilas, colas, y listas estructura de datos
Pilas, colas, y listas estructura de datosPilas, colas, y listas estructura de datos
Pilas, colas, y listas estructura de datos
 
Java pilas (Stacks) y colas (Queues)
Java pilas (Stacks) y colas (Queues)Java pilas (Stacks) y colas (Queues)
Java pilas (Stacks) y colas (Queues)
 

Similaire à Python

Introduccion_a_Python_000000000000000.pdf
Introduccion_a_Python_000000000000000.pdfIntroduccion_a_Python_000000000000000.pdf
Introduccion_a_Python_000000000000000.pdfFranciaMascarell
 
Codigo Escalable WDT
Codigo Escalable WDTCodigo Escalable WDT
Codigo Escalable WDTEdwin Cruz
 
fuzzing.pdf
fuzzing.pdffuzzing.pdf
fuzzing.pdfndi_z
 
Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...
Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...
Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...RootedCON
 
Git: flujos de trabajo y herramientas para trabajo colaborativo
Git: flujos de trabajo y herramientas para trabajo colaborativoGit: flujos de trabajo y herramientas para trabajo colaborativo
Git: flujos de trabajo y herramientas para trabajo colaborativoAprende Git
 
Screencast aprende python - parte 1
Screencast   aprende python - parte 1Screencast   aprende python - parte 1
Screencast aprende python - parte 1Noe Nieto
 
Información básica Java
Información básica JavaInformación básica Java
Información básica JavaFordBull2er
 
Procesos e Hilos en los Sistemas Operativos
Procesos e Hilos en los Sistemas OperativosProcesos e Hilos en los Sistemas Operativos
Procesos e Hilos en los Sistemas OperativosEmmanuel Fortuna
 
.NET Memoria y Rendimiento
.NET Memoria y Rendimiento.NET Memoria y Rendimiento
.NET Memoria y RendimientoEduard Tomàs
 
Argentesting 2019 - Por que-python-esta-buenisimo
Argentesting 2019 - Por que-python-esta-buenisimoArgentesting 2019 - Por que-python-esta-buenisimo
Argentesting 2019 - Por que-python-esta-buenisimoArgentesting
 
Java1-Intro.pptbbjjjfdzvñutfdnmj habitación
Java1-Intro.pptbbjjjfdzvñutfdnmj habitaciónJava1-Intro.pptbbjjjfdzvñutfdnmj habitación
Java1-Intro.pptbbjjjfdzvñutfdnmj habitaciónFabiolaCastilloCanci
 
Java introduccion conceptos basicos una mira
Java introduccion conceptos basicos una miraJava introduccion conceptos basicos una mira
Java introduccion conceptos basicos una miraArisbethBernalSalina
 
Caracteristicas de C Sharp
Caracteristicas de C SharpCaracteristicas de C Sharp
Caracteristicas de C SharpEdgardo Martinez
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJSRodrigo Pimentel
 

Similaire à Python (20)

Introduccion_a_Python_000000000000000.pdf
Introduccion_a_Python_000000000000000.pdfIntroduccion_a_Python_000000000000000.pdf
Introduccion_a_Python_000000000000000.pdf
 
Codigo Escalable WDT
Codigo Escalable WDTCodigo Escalable WDT
Codigo Escalable WDT
 
fuzzing.pdf
fuzzing.pdffuzzing.pdf
fuzzing.pdf
 
Gestión Remota de Equipos con Python
Gestión Remota de Equipos con PythonGestión Remota de Equipos con Python
Gestión Remota de Equipos con Python
 
Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...
Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...
Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...
 
Git: flujos de trabajo y herramientas para trabajo colaborativo
Git: flujos de trabajo y herramientas para trabajo colaborativoGit: flujos de trabajo y herramientas para trabajo colaborativo
Git: flujos de trabajo y herramientas para trabajo colaborativo
 
Screencast aprende python - parte 1
Screencast   aprende python - parte 1Screencast   aprende python - parte 1
Screencast aprende python - parte 1
 
Información básica Java
Información básica JavaInformación básica Java
Información básica Java
 
Introducción a Phyton
Introducción a PhytonIntroducción a Phyton
Introducción a Phyton
 
Procesos e Hilos en los Sistemas Operativos
Procesos e Hilos en los Sistemas OperativosProcesos e Hilos en los Sistemas Operativos
Procesos e Hilos en los Sistemas Operativos
 
.NET Memoria y Rendimiento
.NET Memoria y Rendimiento.NET Memoria y Rendimiento
.NET Memoria y Rendimiento
 
Argentesting 2019 - Por que-python-esta-buenisimo
Argentesting 2019 - Por que-python-esta-buenisimoArgentesting 2019 - Por que-python-esta-buenisimo
Argentesting 2019 - Por que-python-esta-buenisimo
 
"Al rico" PHP
"Al rico" PHP"Al rico" PHP
"Al rico" PHP
 
Java1-Intro.pptbbjjjfdzvñutfdnmj habitación
Java1-Intro.pptbbjjjfdzvñutfdnmj habitaciónJava1-Intro.pptbbjjjfdzvñutfdnmj habitación
Java1-Intro.pptbbjjjfdzvñutfdnmj habitación
 
Java introduccion conceptos basicos una mira
Java introduccion conceptos basicos una miraJava introduccion conceptos basicos una mira
Java introduccion conceptos basicos una mira
 
Caracteristicas de C Sharp
Caracteristicas de C SharpCaracteristicas de C Sharp
Caracteristicas de C Sharp
 
Javascript
JavascriptJavascript
Javascript
 
Programación con java en Eclipse
Programación con java en EclipseProgramación con java en Eclipse
Programación con java en Eclipse
 
Doble o nada
Doble o nadaDoble o nada
Doble o nada
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJS
 

Plus de Cristian González García (9)

4. Microsoft Azure
4.  Microsoft Azure4.  Microsoft Azure
4. Microsoft Azure
 
2. Amazon Web Services
2.  Amazon Web Services2.  Amazon Web Services
2. Amazon Web Services
 
3. Hadoop
3.  Hadoop3.  Hadoop
3. Hadoop
 
1. Introducción Big Data
1.  Introducción Big Data1.  Introducción Big Data
1. Introducción Big Data
 
5. Seguridad
5.  Seguridad5.  Seguridad
5. Seguridad
 
4. CMS e-commerce
4.  CMS e-commerce4.  CMS e-commerce
4. CMS e-commerce
 
3. Modelos de negocio
3.  Modelos de negocio3.  Modelos de negocio
3. Modelos de negocio
 
2. Markets
2.  Markets2.  Markets
2. Markets
 
1. Medios de pago
1.  Medios de pago1.  Medios de pago
1. Medios de pago
 

Dernier

PRIMER GRADO SOY LECTOR PART1- MD EDUCATIVO.pdf
PRIMER GRADO SOY LECTOR PART1- MD  EDUCATIVO.pdfPRIMER GRADO SOY LECTOR PART1- MD  EDUCATIVO.pdf
PRIMER GRADO SOY LECTOR PART1- MD EDUCATIVO.pdfGabrieldeJesusLopezG
 
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...YobanaZevallosSantil1
 
Actividad transversal 2-bloque 2. Actualización 2024
Actividad transversal 2-bloque 2. Actualización 2024Actividad transversal 2-bloque 2. Actualización 2024
Actividad transversal 2-bloque 2. Actualización 2024Rosabel UA
 
Uses of simple past and time expressions
Uses of simple past and time expressionsUses of simple past and time expressions
Uses of simple past and time expressionsConsueloSantana3
 
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docxMagalyDacostaPea
 
SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...
SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...
SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...GIANCARLOORDINOLAORD
 
Manejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsaManejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsaLuis Minaya
 
Técnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesTécnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesRaquel Martín Contreras
 
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2Eliseo Delgado
 
HISPANIDAD - La cultura común de la HISPANOAMERICA
HISPANIDAD - La cultura común de la HISPANOAMERICAHISPANIDAD - La cultura común de la HISPANOAMERICA
HISPANIDAD - La cultura común de la HISPANOAMERICAJesus Gonzalez Losada
 
III SEGUNDO CICLO PLAN DE TUTORÍA 2024.docx
III SEGUNDO CICLO PLAN DE TUTORÍA 2024.docxIII SEGUNDO CICLO PLAN DE TUTORÍA 2024.docx
III SEGUNDO CICLO PLAN DE TUTORÍA 2024.docxMaritza438836
 
GUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIA
GUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIAGUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIA
GUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIAELIASPELAEZSARMIENTO1
 
4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...
4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...
4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...MagalyDacostaPea
 
MODELO DE INFORME DE INDAGACION CIENTIFICA .docx
MODELO DE INFORME DE INDAGACION CIENTIFICA .docxMODELO DE INFORME DE INDAGACION CIENTIFICA .docx
MODELO DE INFORME DE INDAGACION CIENTIFICA .docxRAMON EUSTAQUIO CARO BAYONA
 
Mapa Mental de estrategias de articulación de las areas curriculares.pdf
Mapa Mental de estrategias de articulación de las areas curriculares.pdfMapa Mental de estrategias de articulación de las areas curriculares.pdf
Mapa Mental de estrategias de articulación de las areas curriculares.pdfvictorbeltuce
 

Dernier (20)

PRIMER GRADO SOY LECTOR PART1- MD EDUCATIVO.pdf
PRIMER GRADO SOY LECTOR PART1- MD  EDUCATIVO.pdfPRIMER GRADO SOY LECTOR PART1- MD  EDUCATIVO.pdf
PRIMER GRADO SOY LECTOR PART1- MD EDUCATIVO.pdf
 
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
 
Actividad transversal 2-bloque 2. Actualización 2024
Actividad transversal 2-bloque 2. Actualización 2024Actividad transversal 2-bloque 2. Actualización 2024
Actividad transversal 2-bloque 2. Actualización 2024
 
Uses of simple past and time expressions
Uses of simple past and time expressionsUses of simple past and time expressions
Uses of simple past and time expressions
 
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx
 
Sesión La luz brilla en la oscuridad.pdf
Sesión  La luz brilla en la oscuridad.pdfSesión  La luz brilla en la oscuridad.pdf
Sesión La luz brilla en la oscuridad.pdf
 
SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...
SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...
SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...
 
Manejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsaManejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsa
 
PPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptxPPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptx
 
recursos naturales america cuarto basico
recursos naturales america cuarto basicorecursos naturales america cuarto basico
recursos naturales america cuarto basico
 
Técnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesTécnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materiales
 
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
 
Aedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptxAedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptx
 
HISPANIDAD - La cultura común de la HISPANOAMERICA
HISPANIDAD - La cultura común de la HISPANOAMERICAHISPANIDAD - La cultura común de la HISPANOAMERICA
HISPANIDAD - La cultura común de la HISPANOAMERICA
 
III SEGUNDO CICLO PLAN DE TUTORÍA 2024.docx
III SEGUNDO CICLO PLAN DE TUTORÍA 2024.docxIII SEGUNDO CICLO PLAN DE TUTORÍA 2024.docx
III SEGUNDO CICLO PLAN DE TUTORÍA 2024.docx
 
GUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIA
GUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIAGUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIA
GUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIA
 
4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...
4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...
4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...
 
MODELO DE INFORME DE INDAGACION CIENTIFICA .docx
MODELO DE INFORME DE INDAGACION CIENTIFICA .docxMODELO DE INFORME DE INDAGACION CIENTIFICA .docx
MODELO DE INFORME DE INDAGACION CIENTIFICA .docx
 
TL/CNL – 2.ª FASE .
TL/CNL – 2.ª FASE                       .TL/CNL – 2.ª FASE                       .
TL/CNL – 2.ª FASE .
 
Mapa Mental de estrategias de articulación de las areas curriculares.pdf
Mapa Mental de estrategias de articulación de las areas curriculares.pdfMapa Mental de estrategias de articulación de las areas curriculares.pdf
Mapa Mental de estrategias de articulación de las areas curriculares.pdf
 

Python

  • 1. Introducción a Python v.1.1.2 Cristian González García Departamento de Informática Universidad de Oviedo
  • 2. Contenidos • Introducción: Python, Ecosistema, Usado por..., Python 3 vs Python 2 • Instalación: Instalación, Pruebas Unitarias • Conceptos Básicos • Sintaxis Básica • Estructuras de Control • Funciones • Estructuras de Datos: Listas, Del, Tuplas, Sets, Diccionarios • Módulos • Paquetes • Input and Output: Ficheros, JSON • Errores y Excepciones: Syntax Errors, Exceptions • Clases • Características, Clases, Data Attributes, Métodos, Class and Instance Variables , Herencia, Herencia Múltiple, Privacidad, Excepciones, Iteradores, Generadores, Constantes, Métodos estáticos, Métodos abstractos, Métodos estáticos abstractos, • Duck Typing • Otros: Crear ejecutable para Windows • Técnicas Web: Flask, Django, Otros • Referencias: Libros
  • 4. Python • Creado en 1991 por Guido van Rossum • Multiparadigma: Imperativo, Funcional y Orientado a Objetos • Tipado dinámico y fuerte • Interpretado • Multiplataforma • Influencias • Java, Haskell, Lisp, Perl Guido van Rossum Fuente: http://commons.wikimedia.org/wiki/File:Guido_van_Rossum_OSCON_2006.jpg Python is a programming language that lets you work quickly and integrate systems more effectively – Python.org
  • 5. Ecosistema I • Página: https://www.python.org/ • Implementaciones • CPython (C) – Oficial • IronPython (C#) • Jython (Java) • CLPython (Lisp) • PyPy • Versiones en funcionamiento • 2.7.X (2010) • 3.4.X (2014)
  • 6. Ecosistema II • Intérprete interactivo: python • Gestión de paquetes • pip (https://pypi.python.org/pypi) • Documentación: https://www.python.org/doc/ • Entorno desarrollo • Extensión Eclipse: Aptana • PyCharm de JetBrains
  • 7. Usado por … I • Youtube • Sitio web: rapidez de siti oy de desarrollo • Industrial Light & Magic • Procesamiento de Star Wars Episodio II (renderizado) • Otras aplicaciones • Google • Sitio web desde los inicios • Journyx • Sitio web más rápido que sus competidores • Desarrollan 10 veces más rápido que en Java y 100 que en C • IronPort • Productos de seguridad y servicios para empresas • Más de 1 millón de líneas de Python • EVE Online • Juego multijugador masivo (MMORPG) • Más de 50.000 jugadores simultáneos • Rapidez de desarrollo de todo el juego y su flexibilidad
  • 8. Usado por … II • HomeGain • Búsqueda de casas • Mejora continua rápida • Conciso, sintaxis clara y poderosa biblioteca • Thawte Consulting • Autoridad certificadora (5ª del mundo) de certificados • Productivo y gran mantenimiento de código • University of Maryland • Estudiantes de Web Semántica • Flexibilidad y el gran número de bibliotecas • EZTrip.com • Agencia de viajes • Rápido desarrollo desde que lo incorporaron (días y no meses) • RealEstateAgent.com • Agencias de casas (venta, alquiler, …) • Aplicaciones rápidas y compenentes con recursos mínimos • Es un lenguaje crítico para ellos en su clúster • Firaxis Games • Empresa de videojuegos (Civilization, XCOM) • Herramienta de mods, pantallas de juego, interfaces, … • Lenguaje de Scripting, recolector de basura, desarrollo más rápido que en C++, ..
  • 9. Python 3 vs Python 2 • “Python 2.x is legacy, Python 3.x is the present and future of the language” - Python.org • Python 2 • Ya no recibe actualizaciones mayores • Muchos problemas con las codificaciones • Muchas librerías creadas en Python 2 y sin portar a Python 3 • Herramienta para ayudar a portar el código: 2to3 (https://wiki.python.org/moin/2to3) • Python 3 • Ofrece un soporte correcto a las codificaciones. Por defecto, todo es Unicode (UTF-8) • No es retro-compatible • Cambios en algunas funciones/clases • Más eficiente con la memoria • Aún no están todas las librerías portadas • Mejoras en el Core (funciones, librerías, rendimiento, excepciones, …) • Herramienta para ayudar a portar el código: 3to2 (https://wiki.python.org/moin/3to2)
  • 12. Instalación II • Una vez descargado, ejecutamos el instalador Siguiente
  • 13. Instalación III • Seleccionamos la carpeta de la instalación Siguiente
  • 14. Instalación IV • Seleccionamos lo que deseamos instalar
  • 15. Instalación V • Esto nos instalará Python en el path Seleccionar Siguiente
  • 16. Instalación VI • Esperamos… Y finalizará solo
  • 17. Instalación VII • Abrimos un nuevo terminal o lo reiniciamos • Comprobamos que tenemos Python • Comando: python • Muestra la versión de Python • Abre el Intérprete Interactivo
  • 18. Instalación VIII • Abrimos el CMD • Miramos los paquetes instalado • pip freeze • Esta vacío pues no instalamos ningún paquete • Para instalar un paquete • pip install nombreDelPaquete
  • 19. Instalación IX • Instalamos el framework flask • pip install flask • Comprobamos los paquetes
  • 20. Pruebas Unitarias I • Unittest • Antiguo PyUnit • Similar a xUnit: JUnit, PHPUnit,… • Flujo de trabajo • Importar “unittest” • Crear una clase que herede de “unittest.TextCase” • Crear funciones que comiencen por “test_” • Ejecutar las pruebas utilizando unittest.main()
  • 21. Pruebas Unitarias II • Métodos autollamados • setUp(self): Antes de ejecutarse un test • tearDown(self): Después de ejecutarse un test • Métodos disponibles • assertEqual, assertRaises, assertFalse, assertTrue, assertDictEqual, assertIsInstance, asserIsNone, … • __main___ • Variable que se crea cuando se ejecuta el módulo como programa principal. Con el “if”, se evita que se ejecute ese código si se importa en otro
  • 25. Conceptos básicos • Lenguaje Multiparadigma • Imperativo, Funcional y Orientado a Objetos • Todo son Objetos • No hay tipos primitivos • Esto proporciona que todo tenga métodos
  • 26. Tipado dinámico • No se declara el tipo de la variable • La variable puede tomar diferente tipo en distintos momentos • Permite mayor flexibilidad • Chequeo de tipos en tiempos de ejecución • Errores en tiempo de ejecución http://stackoverflow.com/questions/125367/dynamic-type-languages-versus-static-type-languages http://www.smashingmagazine.com/2013/04/18/introduction-to-programming-type-systems/
  • 27. Fuertemente Tipado • Permite algunas operaciones entre parámetros de tipo similar (numérico) • Int con Float, Int con Complex, … • No permite operaciones entre números y cadenas
  • 29. Sintaxis básica • ; - Opcional, salvo si hay varias sentencias en la misma línea • () - Opcionales en las estructuras de control • Requiere identación obligatoria • 4 espacios (recomendado) ó 1 tabulador • Mismo tipo de identación elegida en todo el documento • Los IDEs lo suelen automatizar • Comentario #: • # Esto es un comentario de una línea • Antes de la almohadilla hay que dejar dos espacios y detrás uno: 2*espacios#espacio • Comentario multilínea • “““ Comentario multilinea ””” • Nombrado • Funciones: snake_case (nombre_de_la_funcion_o_variable) y empieza por minúscula • Variables: snake_case (nombre_de_la_funcion_o_variable) • Clases: CamelCase (NombreDeLaClase) y empieza por mayúscula • Booleanos: “False” y “True” • Negación: “not”. Es similar al “!” de otros lenguajes • El valor nulo es “nil” en vez de null • Algo sin valor es “None”
  • 31. Condicional - if • if…elif…elif[…else] • elif = else if • else: opcional • Si no existe y debiera entrar, el programa continua sin realizar ninguna acción
  • 32. Bucle – for • Es diferente al bucle clásico • Itera sobre los elementos de secuencias (listas, cadenas, …) siguiendo el orden
  • 33. Range • Función que permite iterar sobre una secuencia de números • Genera progresiones aritméticas
  • 34. break, continue • break • Igual que en C y Java • Rompe el bucle • continue • Igual que en C y Java • Salta a la inmediatamente a la siguiente iteración
  • 35. else • Los bucles “for” pueden incorporar la sentencia “else” • Se ejecuta • Cuando termina de iterar • Cuando hay un “continue” • No se ejecuta • Cuando termina con un “break”
  • 36. pass statements • Esta sentencia no hace nada • Se utiliza cuando se requiere una declaración sintáctica pero en la que aun no queremos realizar ninguna acción o rellenar
  • 37. Ejercicio: Par - Factorial • https://gist.github.com/gonzalezgarciacristian /bd448626508198c83645 • even(n): chequea que un nº es par • Devuelve True/False • factorial(n): calcula el factorial de un nº • No utilizar la librería math • Devuelve el factorial
  • 39. Funciones I • Se utiliza la palabra reservada “def” • Debe haber dos líneas de separación entre funciones • La primera línea puede ser la descripción • Utilizada por herramientas de documentación • Pasa los valores por copia, como en Java
  • 40. Funciones II • Permite guardar funciones en variables • Sirve para crear alias de la función • Las funciones retornan “None” • Por convenio • Si no tienen retorno • Si la función termina antes de llegar al retorno
  • 41. Parámetros por defecto I • Se pueden crear parámetros con valores por defecto • Si se asigna un parámetro por defecto, han de asignarse los siguientes (Definición y llamada)
  • 42. Parámetros por defecto II • El valor por defecto, en caso de coincidir, lo coge de la variable global en dicho punto de la ejecución, aunque después cambie • Si el valor por defecto es mutable, en el caso de listas, diccionarios o clases, este se acumulará • Para evitar esto hay que utilizar “None”
  • 43. Keyword Argument • Se pueden pasar los parámetros a las funciones utilizando el nombre del parámetro • Permite utilizar algunos valores por defecto • Si los utilizamos, deberemos especificar todas las que no vayan en orden
  • 44. Arbitrary Argument Lists • Como parámetro, generalmente el final, se puede crear una lista de argumentos arbitrarios • Esta lista envuelve en una tupla todos los argumentos restantes pasados a la función
  • 45. Unpacking Argument Lists • Permite enviar elementos en tuplas, listas y diccionarios • Estos pueden ser automáticamente procesados, pero hay que especificarlo • *arg: lista o tupla • **arg: diccionario
  • 46. Lambda Expressions • Azúcar sintáctico de una función normal • Se crean utilizando la palabra reservada “lambda” • También conocidas como funciones anónimas, clausuras o funciones Lambda • Sirven para ser pasadas como argumento o devolver el resultado de una función sencilla sin necesidad de definirlas completamente
  • 47. Documentación • Existe una convención para la documentación • 1ª línea debe ser un resumen corto • Comienza en mayúscula y termina en punto • 2ª línea debe ser una línea en blanco • 3ª en adelante: Información
  • 49. Listas I • Se instancian vacías con: [] • Se pueden instanciar con datos: [3, 4, 5] • Métodos • append(x), extend(list), insert(i, x), remove(x), pop([i]), clear(), index(x), count(x), sort(), reverse(), copy() • Insert, remove y sort devuelven “None” • Principio de diseño para todas las estructuras mutables en Python
  • 50. Listas II - Pilas • Último en entrar, primero en salir • Usando los métodos • append(x): añadir elemento • pop(): sacar último elemento
  • 51. Listas III - Colas • Primero en entrar, primero en salir • Las listas no son eficientes para esto • Añadir y sacar del final es rápido • Añadir y sacar del principio es lento: tiene que mover todos los elementos uno a uno • Hay que utilizar collections.deque
  • 52. Listas IV – Comprehensions • Azúcar sintáctico para crear listas • Crear listas donde cada miembro es el resultado de una condición • Consiste en una expresión seguida de una cláusula
  • 53. Ejercicio: Números primos • https://gist.github.com/gonzalezgarciacristian/0 023aeb4e3b98edc5a2d • is_prime(n): dice si un número es primo o no • Devuelve True/False • obtain_prime_factors(n): calcula los factores primos de n • Devuelve una lista con los factores primos • n = 0 -> [] • n = 1 -> [1] • n > 1 -> [1, …]
  • 54. Del statement • Sentencia que permite • Borrar uno o más elementos de una lista • Borrar toda la lista • No devuelve el valor, algo que si hace .pop([i])
  • 55. Tuplas I • Valores separados por coma (,) • (1, 2); (3, ‘a’); ([4, 5], “Hello”, 5); … • Puedes anidarse (contener tuplas) • Son inmutables (no se pueden modificar una vez creadas) • Pueden contener múltiples objetos
  • 56. Tuplas II • Pueden contener elementos mutables, como listas • Se instancian • Tupla vacía: () • Tupla 1 o más elementos separados por: , • Para desempaquetar una tupla, hay que asignar tantas variables como posee. Si no, error
  • 57. Sets I • Colección de elementos no duplicados desordenados • Se instancian con • Vacío: set() • Con un solo elemento iterable (strings, listas, …): set(x) • Con elementos: {x, y, z}
  • 58. Sets II • Soporta operaciones matemáticas • Unión, intersección, diferencia, diferencia simétrica • Soportan “list comprehensions”
  • 59. Diccionarios I • En otros lenguajes son similares a los “associative memories”, “associative arrays” o “hash table” • Son un set desordenado compuesto por clave-valor • Indexan usando las claves (“keys”) • Elementos inmutables: Números, strings o tuplas • Tuplas: sólo si contienen números, strings o tuplas • Las claves son únicas • Se instancian con • Vacío: {} • Datos: {clave: valor} -> {‘Lerdorf’: 2, ‘Matsumoto’: 3}
  • 60. Diccionarios II • Los datos se extraen a partir de su clave • Si no existe la clave, excepción “KeyError” • Borrado de datos utilizando “del” y su clave • Si se almacena sobre una clave existente, se sobrescribe el valor
  • 61. Diccionarios III • Utilidades • .keys(): devuelve una tupla con las claves • list(dicc.keys()): obtenemos una lista con las claves desordenadas • sorted(list(dicc.keys())): obtenemos una lista ordenada de las claves • x in dicc: comprueba que x existe en dicc
  • 62. Diccionarios IV • Otras formas de crearlos • Secuencias clave-valor • “Comprehensions” • “Keyword arguments”
  • 63. Ejercicio: Diccionarios • https://gist.github.com/gonzalezgarciacristian/1bee12 16a4917f577e03 • Crear función “calculate_notes” • Recibe 2 diccionarios • solutions = {id_question: answer} -> {1: ‘a’} • students_anserws • {id_student: {id_question : student_answer}} • {1: {1: 'a', 2: 'a'}} • Debe • Iterar los diccionarios y calcular la nota por alumno • Acierto: +1; Fallo: -0.25 • Retorna un diccionario • {id_student: note} -> {1: 0.75}
  • 65. Módulos I • Archivo que contienen definiciones y sentencias de Python • Permiten • Dividir el código en varios archivos • Reutilizar código • Organizar las funciones • El nombre del módulo es el nombre del archivo + .py • Se importa con la sentencia import • Se puede obtener el nombre del módulo con el método: __name__
  • 66. Módulos II • Hay dos formas de importarlos • import “moduleName” • Menos sentencias “import”, pues trae todo el módulo • Hay que escribir el nombre del módulo delante para acceder a él • from “moduleName” import “functionality” • No hay que escribir el nombre del módulo delante de la funcionalidad • Mayor control sobre lo que se carga de cada módulo • Para nuevas funcionalidades que se usen, hay que actualizar los “import” • Menos verboso y menos legibilidad
  • 67. Módulos III • import “moduleName” • from “moduleName” import “functionality”
  • 68. Módulos IV • Es posible crear un nombre local con la función del módulo
  • 70. Ficheros I • open(filename, mode) • retorna un objeto de tipo “file” • filename: nombre del fichero • mode: modo de apertura • Se pueden juntar: r+, w+, a+, rb, wb, … Modo Significado 'r' Lectura (por defecto) 'w' Escritura desde el principio del fichero 'x' Abrir creando el fichero, falla si ya existe 'a' Escritura desde el final del fichero 'b' Modo binario 't' Modo texto (por defecto) '+' Lectura y escritura 'U' (Obsoleto)
  • 71. Ficheros II - Escritura • Se utiliza el método open(filename, mode) • mode • w: escritura desde principio del fichero • w+: escritura y lectura desde principio del fichero • a: escritura desde final del fichero • a+: escritura y lectura desde final del fichero • .write(string): graba en el fichero • Otros tipos de datos hay que convertirlos a string
  • 72. Ficheros III – Lectura I • Se utiliza el método open(filename, mode) • mode • r: lectura del fichero • r+: lectura y escritura • rb: lectura del fichero en modo binario • rb+: lectura y escritura en modo binario • .read(): lee todo el fichero • .readline(): lee las líneas de una en una
  • 73. Ficheros III – Lectura II • .readlines() / list(fileObject): devuelve una lista con todas las líneas
  • 74. Ficheros IV – Otros métodos • .tell(): posición del puntero representado como el nº de bytes • .seek(offset, from_what): cambia la posición del puntero • offset: nueva posición • from_what: desde donde se calcula • 0: Principio; 1: Posición actual; 2: Final de fichero • .close(): cierra el fichero
  • 75. Ficheros V – Otros I • with: palabra clave para abrir los ficheros y que se encarga de cerrarlo al terminar aunque haya un error • .closed: booleano que indica si esta cerrado el fichero
  • 76. JSON - Escritura • Hay que importar la librería JSON • .dump(x, file): graba al fichero los datos x JSON Python object dict array list string unicode number (int) int, long number (real) float true True false False null None • Tabla de equivalencias ->
  • 77. JSON – Lectura • .load(file): deserializa el documento • file: fichero ya abierto para lectura • .dumps(data, sort_keys, indent): muestra en formato JSON los datos. Tiene más parámetros • data: datos • sort_keys: ordenar salida por clave • indent: indenta el código tantos espacios como se indique
  • 79. Syntax Errors • Errores comunes cuando se programa • Sintaxis incompleta o incorrecta • Un IDE ayuda con estos errores
  • 80. Exceptions I • La sintaxis es correcta pero falla algo • Son errores en tiempo de ejecución • Pueden romper el programa si no se tratan • Jerarquía de excepciones: https://docs.python.org/3/library/exceptions. html • Se pueden definir excepciones propias
  • 81. Exceptions II • Para tratar excepciones debemos usa rla cláusula “try-except” • El contenido de “try” será ejecutado • Si el “try” falla, se ejecuta inmediatamente el “except”, obviando el resto del “try” • Si el “try” no falla, se ejecuta entero y no se ejecuta el “except”
  • 82. Exceptions III • En el “except” se ejecuta la cláusula que coincida con el tipo de excepción lanzada en el “try” • Si en el “except” no se encuentra una cláusula válida, el programa fallará • Ctrl-C finaliza la ejecución y es una excepción de tipo “KeyboardInterrupt”
  • 83. Exceptions III • “except” puede soportar varios tipos de error a la vez • Puede tener un valor asociado • “except:” reenvia la excepción a otro nivel • Cuidado, puede enmascarar errores • Se puede utilizar para errores personalizados
  • 84. Exceptions IV • “try-except” soporta opcionalmente la clausula “else” • “else” se ejecutará siempre que se ejecute el “try” al completo
  • 85. Exceptions V • El valor asociado a una excepción es un objeto • Este tiene distintas propiedades • Tipo de error • Argumentos • Dependen del tipo de excepción • Son una tupla
  • 87. Paquetes I • Forma de estructurar los módulos • Permite agrupar los módulos por funcionalidades similares • Ayuda a evitar colisiones entre diferentes módulos (variables, nombres, …) • Contienen un archivo __init__.py • No confundir con los directorios
  • 88. Paquetes II • Se accede utilizando el “.” • packageA.moduleB: Módulo “moduleB” del paquete “packageA” • Desde Python 3 se recomienda, aunque funciona sin utilizarlo
  • 89. Paquetes III • __init__.py • Convierte un directorio en un paquete • Evita así que un directorio oculte un paquete o fichero .py debido al nombre • Por defecto estará vacío • Puede contener “imports” que se aplicarán a sus módulos • Ayuda en su simplifación • No se recomienda por que peude tener efectos secundarios • Es usado por los frameworks para cargar módulos que necesitan de una manera fácil para el desarrollador
  • 91. Características • Todo hereda de Object • En Python 3 no hace falta especificarlo, en Python 2 si • Son objetos • Se pueden renombrar, importar,… • Se utiliza “self” como acceso a todo (métodos y funciones) • Tienen herencia múltiple • Se crean en tiempo de ejecución • Se pueden modificar en tiempo de ejecución • Por defecto • Todo es público, no existe encapsulación • Las funciones son virtuales (sobrescribibles por polimorfismo en sus clases derivadas) • Hay sobrecarga de operadores (__add__, __mul__, …)
  • 92. Clases I • Definición: “class nombre:” • Esto crea la definición de un “namespace” • Soportan dos operaciones • Referencia de atributos: acceso a sus métodos y variables utilizando el operador “.” • Instanciación de la clase: crea un objeto de ese tipo
  • 93. Clases II • Por defecto, tienen un constructor vacío • Al instanciarlas, se auto llama al método __init__(self) • Para crear uno, debemos de sobrescribir el método __init__(self) • Solo pueden tener un constructor
  • 94. Clases III • Si queremos tener “varios constructores”, hay que utilizar • Parámetros por defecto • None: para evitar problemas con objetos mutables (listas, diccionarios, clases) • Keyword arguments
  • 95. Data Attributes • No hace falta declarar las variables de clase • Estas se crean la primera vez que se utilizan • Pero a nivel de instancia, no de clase • Pueden ser borrados con “del”
  • 96. Métodos • Son funciones que pertenecen a un objeto • Siempre reciben el propio objeto como primer argumento (self) • Se llama “self” por convención • Los métodos son almacenables en variables
  • 97. Class and Instance Variables I • Instance variable: variable compartida por esa instancia • Class variable: variable compartida por todas las instancias. Son modificables. Se autocrean
  • 98. Class and Instance Variables II • Instance variable • Cuidado con los objetos mutables (listas y diccionarios) • Estos se comportarían como una variable estática • Es accesible para todas las instancias
  • 99. Ejercicio: Clases • https://gist.github.com/gonzalezgarciacristian/9 0aafd11828f013bc0d6 • Crear una clase “Team” • Tiene una lista de jugadores • Puede tener un entrenador, o no • Crear clase “Player” • Tiene atributos “name” y “number” • Método __str__() • Crear clase “Coach” • Tiene un atributo “name”
  • 100. Herencia I • Se pasa la clase padre entre paréntesis • Estas pueden estar en otros módulos • Importarlo • Referenciarlo (depende del tipo de “import”)
  • 101. Herencia II • Hay que llamar al constructor padre explícitamente para obtener sus valores
  • 102. Herencia III • super().__init__(): Calcula automáticamente el padre • Class.__init__(): Se especifica el constructor
  • 103. Herencia IV • Primero busca en la clase hija (método, variable), si no lo encuentra, busca en el padre • Todos los métodos son virtuales
  • 104. Herencia V • isinstance(obj, class) • obj: instancia a comprobar • class: clase sobre la que se comprueba el obj • issubclass(sonClass, baseClass) • sonClass: clase hija que se quiere comprobar • baseClass: clase sobre la que se comprueba
  • 105. Ejercicio: Herencia • https://gist.github.com/gonzalezgarciacristian/1bb60b6bb573c3155428 • Crear “Figure “ • Métodos de “Figure” • area: no hace nada • areas: calcula el area total de una lista de figuras • are_archenemy: comprueba si dos figuras son del mismo tipo • “Square” y “Circle” • Heredan de “Figure” • Crear constructors con sus atributos • Sobreescribir método “area” • Para el círculo usad “math.pi” • “Square” • Dos atributos: “width” y “height” • “Circle” • Un atributo: “radio”
  • 106. Herencia múltiple • Se pasan la clases padre entre paréntesis • Preferencia de izquierda a derecha • Todas las clases heredan de Object • Más información: https://www.python.org/download/releases/2.3/mro/
  • 107. Herencia múltiple II • Si especificamos el padre, deberemos de hacerlo en todos los métodos que deseemos, si no, funciona de izquierda a derecha
  • 108. Privacidad I • Python no tiene encapsulación • Python consigue la encapsulación mediante la convención de nombres • _name: Privado aunque accesible • __name: Anti colisiones entre métodos heredados • Obliga a especificar el nombre de la clase que lo implementa (mangling): _Classname__name() • __name__: Elimina el mangling y evita tener que especificar el nombre de la clase • https://docs.python.org/3/tutorial/classes.html#priv ate-variables
  • 110. Excepciones I • La clase debe heredar de “Exception” • Se lanzan con • raise Class: Lanza una excepción de esa clase • raise Instance: Lanza una excepción del tipo de esa instancia
  • 111. Excepciones II • “except” puede capturar nuestra excepción • Tiene prioridad siempre la excepción de la clase padre
  • 112. Iteradores I • El “for” utiliza iteradores • Contiene el método __next__(self) • Contiene la lógica de como iterar esos tipos de objetos • Cuando no hay elementos, lanza la excepción “StopIteration”
  • 113. Iteradores II • Para crear un objeto iterable • Implementar el método __iter__(self) • Definir el comportamiento en __next__(self) • Lanzar la excepción “StopIteration” para evitar el error: “IndexError: string index out of range”
  • 114. Generadores I • Herramienta para crear iteradores • Los iteradores pueden hacer lo mismo que los generadores • Se crean con la palabra reservada “yield” • Diferencias con los iteradores • Autocrea el __iter__(self) • Autocrea el __next__(self) • Se encargan de la excepción “StopIteration”
  • 116. Constantes • No hay constantes de clase de forma nativa • Hay formas de simularlas • Excepciones • Método que devuelva un valor
  • 117. Métodos estáticos • Aquellos métodos que no utilizan ninguna variable o método de la instancia (self) • No llevan el atributo “self” • Se marcan con “@staticmethod”
  • 118. Métodos abstractos • Módulo: abstract base classes (ABCs) • Hay que marcar el método requerido • @abc.abstractmethod • La clase padre no se podrá instanciar, pues será abstracta • Las clases hijas • Tendrán un warning si no lo implementan • TypeError: Can't instantiate abstract class Duck with abstract methods talk
  • 119. Métodos estáticos abstractos • El padre • Debe marcar el método con • @staticmethod • @abc.abstractmethod • El hijo • Debe implementar el método • Debe marcarlo con “@staticmethod”
  • 121. Duck Typing I • “Cuando veo un ave que camina como un pato, nada como un pato y suena como un pato, a esa ave yo la llamo un pato” – Davis, Robin S. • El conjunto de métodos y propiedades del objeto determina su tipo, en vez de la herencia • Permite polimorfismo sin herencia • El estado dinámico del objeto determina las operaciones que este puede realizar y no su herencia • Si posee un método lo ejecuta • Si no, lanza una excepción AttributeError • Se evita hacer comprobaciones de instancia (isinstance()) y de tipo (type()) • “Es mas fácil pedir perdón que pedir permiso”
  • 122. Duck Typing II • De esta manera, una función puede recibir un objeto y ejecutar lo que deba, en el caso de que el objeto pasado no pueda, se lanza el error • Recae en el programador el pasar el objeto adecuado • Mejor conocimiento del programa • Buenas prácticas de programación • Excepciones • Pruebas • “Si camina como un pato y nada como un pato, podría ser un dragón imitando a un pato”
  • 124. OTROS
  • 125. Crear ejecutable para Windows • Hay que utilizar la herramienta py2exe • Solo disponible actualmente para Python 2 • http://www.py2exe.org/ • Para Python 3 está en desarrollo • https://pypi.python.org/pypi/py2exe/0.9.2.0 • Pasos
  • 127. Flask • Microframework ligero para aplicaciones web • Modularizado • Muchos módulos para extenderlo • BBDD de objetos, validación de formularios, autenticación… • Escrito en Python • Utiliza el motor de plantillas Jinja2 • Crear/Generar HTML por código • Licencia BSD • Uso comercial, modificable, distribuible, se puede sublicenciar y dar garantía • Multiplataforma • RESTful • Contiene servidor (puerto 5000) y modo de depuración • Soporte integrado para test unitarios • Tiene implementado un sistema de cookies seguras • 1 de abril de 2010 – 14 de Junio de 2013 (Última release) • http://flask.pocoo.org/
  • 128. Django • La “D” es muda • Framework de código abierto • Escrito en Python • Arquitectura Modelo-Vista-Controlador • Utilizado por: Pinterest, Instagram, Mozilla, … • Utiliza su propio motor de plantillas • Crear/Generar HTML por código • Posee un framework para la caché • Sistema de internacionalización • Soporte integrado para test unitarios • Licencia BSD • Uso comercial, modificable, distribuible, se puede sublicenciar y dar garantía • Multiplataforma • Contiene servidor (puerto 8000) y modo de depuración • Mantenido por la Django Software Foundation • Integración en diferentes IDE: Aptana, PyCharm, Eclipse,… • 21 de Julio del 2005 – 2 de Septiembre del 2014 (Última release) • https://www.djangoproject.com/
  • 129. Otros Framework Versión Estable Actual Fecha de última release Licencia BlueBream 1.0 2011-01-18 ZPL CherryPy 3.2.2 2011-10-28 BSD CubicWeb 3.15.2 2012-07-24 LGPL Django 1.7 2014-09-02 BSD Flask 0.10.1 2013-06-14 BSD Grok 1.4 2011-04-04 ZPL Nagare 0.4.1 2012-01-18 BSD Pyjamas 0.8 2012-06-01 Apache Pylons 1.0.1 2012-08-14 BSD Pyramid 1.5 2014-04-08 BSD TACTIC 4.0 2013-05-07 EPL Tornado 3.1.1 2013-09-01 Apache TurboGears 2.3.3 2014-07-07 MIT, LGPL web2py 2.9.5 2014-03-16 LGPL3 Webware 1.1 2011-08-03 Python Zope 2 2.13.15 2012-06-22 ZPL
  • 131. Libros