Tutorial de Python orientado a objetos

Anuncio
Tutorial de Python orientado a objetos
En la primera llave creamos una clase llamada Gelantia.
En la primera parte def __ init__(self, tam, color, sabor): definimos las características del
objeto.
En la segunda parte def desplegarC(self): podremos recuperar la información que le hemos
asignado al objeto.
En la segunda llave le damos las propiedades a los objetos gel1, gel2 y gel2.
En la llave tres llamamos a def DesplegarC(self): para ver las propiedades que le hemos
asignado a los objetos.
1
Otro ejemplo para que tú lo analices
2
Python Poo Herencia
Este será el resultado:
3
Herencia múltiple
Hemos definido una nueva clase llamada Telefono.
La hereda la clase Celular, que recibe herencia múltiple ya que recibe la herencia
Electrodomestico.
Ya podemos utilizar cel.llamar() y cel.colgar() que definimos en la clase Telefono.
4
Este será el resultado:
Nota:
Si las clases Electrodometicos y Telefonos tuvieran un método con el mismo nombre tiene
prioridad la herencia que se encuentran a la izquierda es este caso cogería el método de
Electrodomestico.
5
Python Poo Encapsulamiento
Como podrás observar a la hora de dar atributos a una clase podemos definir un atributo de
tipo privado self.__dia = dia, si lo queremos recuperar nos dará un mensaje de error, en el
resultado podrás observar como el valor del mes si lo podemos visualizar pero el valor del día
nos da un mensaje de error.
6
La llave grande define la creación de la clase Nacimiento.
Al método def ___init__(self): no le pasamos parámetros, se los asignamos en las líneas
continuas.
Verás que el primer valor que le asignamos es self. __anio = 2000, el doble guion bajo hacemos
que la variable sea de tipo privada, es decir que no tendremos acceso directamente como en
los ejemplos anteriores.
Definimos un método set que al estar dentro de la clase tiene acceso al valor de las variables,
en este caso def setMes(self, mes): que admite como parámetro el valor del mes y antes de ser
asignado comprueba si esta valor es correcto o no, si es correcto lo asigna con self.__mes =
mes y si es falso retorna un mensaje print(“Mes invalido.”).
Para poder ver la información del mes que no es pública utilizaremos el método get
Def getMes(self): dond nos retornoará el valor de self.__mes.
Después de crear un objeto de tipo Nacimiento
7
objeto = Nacimiento()
Le pasamos al mes le damos el valor 45  objeto.setMes(45).
Para ver el resultado  print (objeto.getMes()) como no es un mes correcto imprime “Mes
invalido”, e imprime el valor que se le asignó al principio.
A continuación al mes le damos el valor 6  objeto.setMes(6).
Para ver el resultado  print (objeto.getMes()) como el valor es correcto imprime el número
6.
8
Python Poo Estructura de Datos – Lista
Vamos a crear tres clases una llamada la clase Nodo, la clase Lista y la clase principal.
Vamos a especificar todas las cosas que van a tener el elemento de la lista.
En este ejemplo vamos a trabajar con nombre y edad.
Dentro del Nodo vamos a crear el método def __init(self):
Con self. Definimos los objetos Nombre = vacío y edad = 0.
Mediante self.siguiente = None (con esto conseguimos apuntar el al siguiente nodo.
Nombre
Edad
Siguiente
Nombre
Edad
Siguiente
Nada
Nombre
Edad
Siguiente
Nombre
Edad
Siguiente
Nada
Definimos nuestro método principal def __init__(self):
Self.raiz = Nodo()  Al objeto raíz le asignamos el método Nodo() que estará vacía.
9
Ahora vamos a crear el método insertar.
Con el primer ‘if’ controlamos que si el nombre del primer elemento de la lista está vacia el
método raíz va a insertar el nodo al primer elemento.
Si no ‘else’ definimos la variable aux = self.raiz para que guarde la posición donde tenemos que
insertar el nuevo nodo. (Nombre y Edad).
En un bucle while, mientras este sea True que compare si aux.siguinete == None (vacio),
después le pasamos al objeto aux.siguiete el valor de nodo, si se cumple se rompe el bucle y
sino la variable aux asume el valor de aux.siguiente.
Ahora vamos a crear el método consultar.
El objeto aux y aux2 se van a encargar a recoger toda la lista entre todos sus elementos.
Con el primer ‘if’ controlaremos si la lista está vacia, si es así nos mostrará el siguiente mensaje
‘La lista está vacia’.
Sino ‘else’ que imprima el nombre y la edad y mientas ‘while’ el objeto aux.siguiente sea ¡=
(distinto) de vacío, accedemos al siguiente para que lo muestre.
10
Ahora vamos a crear el método eliminar.
Para ello vamos a crear un objeto llamado aux = self.raiz para ir haciendo el recorrido.
Si ‘if’ aux.nombre == None (vacio) que nos diga que no hay elementos que se puedan eliminar.
Sino ‘else’ elemento = input(“Escribe el nombre a eliminar”) que lo asignaremos a la variable
elemento.
Si aux.nombre == elemento: la persona que queremos eliminar y además el valor de la lista
siguiente está vacio, creamos un nuevo Nodo() con lo cual quedará totalmente vacia.
Mientas ‘while’ aux.nombre ¡= None (distinto a vacío) agregaremos una condición.
Sino ‘else’ pasmos los valores de la lista siguiente a la lista actual ‘self.raiz = aux.siguiente’
La variable ‘t’ de tipo boolean le asignamos el valor True.
Sino ‘else’ mientras ‘while’ aux.siguiente ¡= None and t:
aux = aux.siguiente (ir a la siguiente posición)
Si aux.nombre == elementos (que estamos buscando) aux2.siguiente = aux.siguiente, el
aux2.siguiente va una posición atrás del aux.siguiente. y al final aux = None y t = False
aux y aux2
aux
Nombre
Edad
Siguiente
Nombre
Edad
Siguiente
11
Nombre
Edad
Siguiente
En la clase principal vamos a instanciar un objeto lista de la clase Lista().
Creamos un menú con las siguientes opciones que se detallan con las llaves.
Por mediación de input vamos a asignar un valor al objeto ‘opcion’ para que pueda realizar las
opciones detalladas del 1 al 4.
Si opción == 1 con ‘nodo = Nodo()’ vamos a instanciar un objeto nodo de la clase Nodo().
Preguntamos por el nombre y edad que se le asignan a sus correspondientes objetos.
Con ‘lista.insertar(nodo)’ llamamos al método insertas.
Si opción == 2 con ‘lista.consultar()’ llamamos al método consultar.
Si opción == 3 con ‘lista.eliminar()’ llamamos al método eliminar.
Si opción == 4 con break rompemos el bucle y termina el programa.
Python Poo Estructura de datos Pila I
Trabajando con Pilas.
Guardar los valores del 1 hasta el 10 en la pila.
Luego vemos los valores que hemos almacenado.
Guardamos los valores del 1 hasta el 10 en la pila con ayuda del ciclo for y el parámetro range.
Luego vemos los valores que hemos almacenado.
Lo mismo pero con un rango de 1 hasta 100.
Guardamos los valores del 1 hasta el 100, pero aquellos que sean pares, utilizando la condición
elemento % 2 == 0, es decir que son divisible por 2 es decir pares.
Luego vemos los valores que hemos almacenado.
12
Almacenamos en la pila los valores comprendidos entre 1 hasta 100 pero a su ver los multiplica
por 5.
Luego vemos los valores que hemos almacenado.
Asignamos a la pila los valores del 1 hasta el 5.
Vemos los valores que hemos almacenado.
Con la instrucción pila.pop() eliminamos el último valor de la pila
Y luego vemos los valores que tenemos almacenados y el número 5 ya no está.
Con la instrucción pila.append(7) agregamos el valor 7 en la última posición de la pila
Vemos los valores que hemos almacenado.
13
14
Hemos cambiado el código del método de la consulta para que muestre la información en modo
de pila, este será el resultado:
15
Forma de pila
Si queremos que cada vez que aparezca el menú se borre la pantalla.
Para ejecutarlo desde Windows haremos doble clic sobre el archivo que hemos creado.
16
Ahora vamos a modificar el método eliminar() y el método consultar():
Ahora lo podrás ejecutar de nuevo.
17
Python POO Estructura de datos Pila II
En la clase Nodo definimos un objeto que tendrá las siguientes variables:
Nombre, edad y atras.
En la clase Pilla creamos los siguientes métodos:
El método inicial def __init__(self): tendrá una variable ‘self.topo = Nodo()’
El método def insertar(self, nodo): comparará si la variable nombre está vacía, si es así creará
la pila para poder insertar el nombre y la edad sino se colocará antes de los datos que tiene la
pila para introducir el nuevo dato.
El método def eliminar(self): comprobamos si nombre está vacía, si es así que emprima el
mensaje ‘La pila está vacía’ y un pause para poder ver el mensaje, sino self.tope si se situa
antes del último valor, de este modo el puntero de dirección al siguiente dato se rompe,
18
imprime el valor que hemos eliminado, hay una pausa para poder ver el mensaje y si aux.atras
es igual a nada que cree una nueva pila ‘self.tope = Nodo()’.
Con el método def consultar(self): la variable aux asume el valor self.tope el final de la pila, si
aux.nombre == Nove: (que está vacia) que imprima el mensaje ‘La pila está vacia’ sino es así
mientas aux sea distinto a nada que imprima el nombre y la edad, con aux = aux.atras nos
vamos a los datos anteriores para volverlos a imprimir, este bucle lo realizará mientras aux
distinto a None, al final un pause para poder ver los datos.
El método class Principal: crearemos un menú para que el usuario por teclado pueda elegir la
opción que desee y con condiciones iremos llamando los correspondientes métodos.
19
Python POO Estructura de Datos-Cola I
20
Python POO Estructura de Datos-Cola II
21
22
Python POO Especial Agenda (Capítulo final)
Vamos a crear una agenda:
#Ejercicio Agenda
import os
class Archivo:
def __init__(self):
self.lista = []
def iniciarArchivo(self):
archivo = open("agenda.txt","a")
archivo.close()
def escribirArchivo(self):
archivo = open("agenda.txt","w")
self.lista.sort()
for elemento in self.lista:
archivo.write(elemento+"\n")
archivo.close()
def cargarAgenda(self):
archivo = open("agenda.txt","r")
linea = archivo.readline()
if linea:
while linea:
if linea[-1]=='\n':
linea = linea[:-1]
self.lista.append(linea)
linea = archivo.readline()
archivo.close()
def crearContacto(self):
nombre = input("escribe tu nombre: ")
telefono = input("Escribe el teléfono de " + str(nombre) + " : ")
correo = input("Escribe el correo de " + str(nombre) + " : ")
self.lista.append(nombre + "$" + telefono + "$" + correo)
def imprimirContacto(self):
self.lista.sort()
for elemento in self.lista:
arreglo = elemento.split('$')
print ("Nombre: " + arreglo[0] + "\t Teléfono: " + arreglo[1] + "\t Correo: " + arreglo[2])
print ("*******************************")
23
def buscarContacto(self):
nombre = input("Inserta el nombre a buscar: ")
Noencotrado = True
for elemento in self.lista:
arreglo = elemento.split('$')
if nombre in arreglo[0]:
print ("Nombre: " + arreglo[0] + " Teléfono: " + arreglo[1] + " Correo: " + arreglo[2])
print ("*******************************")
Noencotrado = False
if Noencotrado == True:
print("Contacto no encontrado")
def eliminarContacto(self):
nombre = input("Inserta el nombre a eliminar: ")
Noencontrado = True
for elemento in self.lista:
arreglo = elemento.split('$')
if nombre in arreglo[0]:
self.lista.remove(elemento)
Noencontrado = False
if Noencontrado == True:
print("Contacto no encontrado")
archivo = Archivo()
archivo.iniciarArchivo()
archivo.cargarAgenda()
while True:
os.system('cls')
print("1.- Escribir contacto")
print("2.- Lee contactos")
print("3.- Buscar contacto")
print("4.- Eliminar contacto")
print("5.- salir contacto")
try:
opcion = int(input("Inserte la opción a elegir: "))
except:
print("Opción no valida")
os.system('pause')
continue
if opcion == 1:
archivo.crearContacto()
elif opcion == 2:
archivo.imprimirContacto()
elif opcion == 3:
archivo.buscarContacto()
24
elif opcion == 4:
archivo.eliminarContacto()
elif opcion == 5:
archivo.escribirArchivo()
break
else:
print("Opción no valida")
os.system('pause')
Podrás observar que en la carpeta que tienes el proyecto se ha creado un archivo de texto
llamada agenda.txt que almacena los datos para que no se pierdan cuando salimos del
programa.
25
Descargar