Transcripciones
1. Introducción a la programación orientada a los objetos: Bienvenido a la programación completa
orientada a objetos en la masterclass de Python. Si estás aprendiendo Python
y querías llevar tus habilidades de programación
al siguiente nivel. Y esta clase es para ti. No necesitas ningún
conocimiento previo para empezar. Entonces, ¿para qué se utiliza la
programación orientada a objetos? Podrías preguntar, OOP se utiliza en informática para
implementar estructuras de datos. También se utiliza en el desarrollo
web, bases de datos, ciencia de datos, inteligencia
artificial, desarrollo de
juegos, interfaces
gráficas de usuario,
y mucho más. En esta clase, aprenderás
todos los fundamentos de la programación orientada a
objetos en Python y los aplicarás
para construir aplicaciones. Así que empecemos. ¿Deberíamos?
2. Clases y objetos: Hola y bienvenidos de
nuevo a mi video. Hoy estaremos echando un vistazo a la programación orientada a objetos
en Python, o en otras palabras, o p. Con programación
orientada a objetos, podrás hacer tus propias clases
personalizadas que se adapten a tus necesidades y usar esas
clases a través de objetos. Entonces, ¿qué es realmente un objeto? Te sorprenderá
que puedas estar usando objetos en el día a día
sin saberlo. Entonces aquí hay un ejemplo de
objetos que estamos utilizando en el diario si imprimimos
el tipo de un entero, por ejemplo, esto es
lo que vamos a conseguir. Como se puede ver,
dice entero de clase. Entonces este número que escribimos
aquí es un objeto de la clase y
similar a una cadena. La palabra matemática aquí es un
objeto de la cadena de clase. Del mismo modo, cuando
creamos una función, realmente solo estamos
creando un objeto de esa clase original llamada
función, por ejemplo. Por lo que ahora establecimos
que la mayoría de las cosas que
usamos en Python son objetos
de su propia clase. Así que aprendamos a crear nuestras propias clases con sus
propias funcionalidades. Entonces vamos a crear una clase
y su forma más simple. Siempre se recomienda
capitalizar la primera letra
en el nombre de nuestra clase, que en este caso es cat. Si queremos usar esta clase, tenemos que crear un
objeto de esta clase. Entonces c1 es el nombre
del objeto y está
llamando a la clase Cat. Y sentémonos en él y
veamos cómo se ve. Esta clase de gato casi no hace
nada además de imprimir. Soy un gato, que en
realidad no es tan útil. Esperamos que nuestra clase
tome nombres, edades de los usuarios hacen
cosas, etcétera. Es por ello que el
método init entra en juego. Todas las clases tienen un
método llamado init, que siempre se ejecuta cuando
se inicia la clase. Vamos a utilizar el
método net para asignar atributos u otras operaciones
que sean necesarias para hacer cuando se
está creando el objeto. Por ejemplo, si quisiera
crear una clase de persona, quería tomar valores
como el nombre y la edad. Por lo que definimos a una persona
de clase con nombre. Ahora definimos el método neto. Como se puede ver, es
tan predeterminado en las clases que python
escribe automáticamente todo el asunto. Para mí, el argumento self
es una referencia a la instancia actual
de la clase y se usa para acceder a variables de
clase. Ahora, agreguemos
argumentos a nuestra clase. Ahora, utilicemos nuestra clase
creando un objeto. Como se puede ver cuando pongo el
cursor sobre los paréntesis, dice parámetro, edad
y nombre no se llenan. Entonces vamos a llenarlos respectivamente. Recuerda, es muy
necesario escribir auto dot antes de asignar a nuestras
variables nombre y borde. Ahora vamos a añadir otro
método a nuestra clase, el método que imprime
detalles sobre la persona. Ahora que hemos definido P1, P2, y P3 para ser un
objeto de nuestra clase. Pueden usar su
método, obtener detalles. Entonces, ¿qué pasa si
creamos un forth antes sin asignar esas variables
requeridas como nombre y borde, vamos a obtener un error diciendo que faltan los dos argumentos
requeridos. Entonces podrías estar preguntando, ¿por qué el
método init es tan especial? ¿ Por qué tenemos que definirlo por defecto cada vez
que creamos una clase? Porque por naturaleza, cuando
escribimos P es igual a persona, estamos esperando
llenar los detalles ahí inmediato y luego usar
cualquier método de la clase. Por ejemplo, si
comentamos y ello, lo que básicamente lo hace ahora
invisible a nuestro programa, como se pueden ver los ahora para
convertir un argumento inesperado. Por lo que ahora tenemos que crear un método completo que tome
entradas del usuario. Entonces por ejemplo, ahora tendremos que eliminar
los argumentos e insertarlos a través del método
insert details. Ahora podemos usar el método
get details. Entonces no sólo esto
es confuso para el usuario en todos los que están
lidiando con este código. También lleva mucho tiempo. Y en todo caso,
se suponía que las clases debían hacer era acortar el tiempo
necesario para hacer las cosas. Entonces, ¿es necesario el método neto? En realidad no, la clase funciona
bien sin ella, pero seguro que ayuda mucho. Entonces este es el código
sin el método net, y este es el código entonces
agregaría método. Entonces para recapitular, creamos
la clase llamada Persona y le dimos los siguientes
atributos, nombre y edad. Definimos métodos en nuestra clase para darle
algunas funcionalidades, como obtener detalles. Y luego creamos objetos de esta clase llamados V1, V2, V3, y rellenamos los parámetros
necesarios y usamos el método get
details. Así que probemos otro ejemplo. Digamos por ejemplo, creamos
una clase de perro y gato, ¿
o toman nombre y edad? Entonces vamos a quitárselos. Obviamente, podemos crear un
objeto a partir de estas clases. Si notas ambas clases
son casi idénticas, con la única
diferencia es
que imprimen
diferentes cadenas. Entonces tuvimos que escribirlo dos veces cuando pudimos haber
escrito una clase
general de padres que incluyera la información genética de
cada animal, por ejemplo. Pero, ¿cómo vinculamos
estas clases? Podrías preguntar, ¿cómo
permites que las clases de
gatos y perros hereden atributos
del animal de clase más general simplemente abriendo paréntesis y escribiendo la clase de balance que
vamos a agregar, en este caso animal. Ahora tanto las clases de gato como de
perro han heredado el método init
del animal de clase padre, y ya no necesitamos
especificarlo cada vez. Entonces vamos a seguir adelante
y quitárselos. Ahora. Vamos a usar nuestros métodos y asegurarnos de que estén funcionando bien. Por lo que no sólo hicimos nuestro código más corto sin dejar de
mantener las mismas características, sino que ahora podemos agregar métodos
que se aplican tanto a clases de gato como de
perro sin
tener que agregarlos a gato y perro específicamente,
por ejemplo. Ahora vamos a usar este
método, cat por ejemplo. Oh, se me olvidó añadir una t aquí. A pesar de que no definimos este método en la clase de gato, gato aún hereda esos métodos de su animal de clase padre. Entonces eso es todo por lo básico. El siguiente video estaremos echando un vistazo más de cerca sobre herencia y los
diferentes tipos de la misma. Entonces eso es todo para el video de hoy. Muchas gracias por mirarte y espero
verte en la siguiente.
3. Herencia: Hola y bienvenidos de
nuevo a mi video. Hoy estaremos echando
un vistazo a tipos de herencia y
programación orientada a objetos en Python. Entonces, ¿por qué la herencia es
útil y biofilm, representa con precisión las relaciones
del mundo real. Permite la reutilización del código. No tenemos que reescribir el mismo código una
y otra vez. Nos permite añadir nuevas características a nuestra clase sin
tener que alterarla. Es de naturaleza transitiva, lo que implica que si clase B hereda de
otra clase a, entonces todas estas subclases heredarán automáticamente de la clase a. con eso en mente,
vamos a echar un vistazo a diferentes tipos
de herencia, empezando por herencia
única. Así digamos por ejemplo, quería crear
una clase country que representara a Canadá. Tendría una
clase de padres llamada Canadá. Ahora vamos a crear
una clase infantil que hereda de Canadá
llamada Ottawa. Dado que Ottawa es una ciudad
y parte de Canadá, cualquier característica que se agregue a Canadá debe
aplicarse automáticamente al auto. Ahora voy a crear un
objeto de la clase infantil Ottawa y utilizar su método ciudad. Desde Auto como
clase infantil de Canadá, también
puedo usar su método nombre de país sin tener que
definirlo dentro de O2. Entonces, por ejemplo, el segundo
tipo es herencia múltiple. Y herencia múltiple,
las características de todas las clases base se
heredan en la clase
derivada. Entonces vamos a crear dos
clases de padres, madre y padre. Ahora vamos a crear
un clúster hijo heredar de estas dos clases. Ahora, vamos a crear un objeto a partir de sol de clase y usar entidades
de su clase padre. Como se puede ver,
pudimos usar nombre del
padre y el nombre de la madre, pesar de que no estaban
definidos en nuestro sol de clase. Y eso es porque
heredamos esos nombres de las dos clases,
madre y padre. El tercer tipo es herencia
multinivel. Hereda tanto la clase base como las entidades de clase
derivadas a
la clase recién derivada. Entonces veamos un ejemplo. Aviso en ambas clases child
invocamos al constructor
de la clase padre. Ahora, vamos a crear objetos de nuestras clases y empezar a utilizarlo. Entonces la razón por la que pasamos
tres parámetros es porque la
clase del sol toma tres nombres. Como se puede ver, el
código funciona muy bien. Entonces, ¿qué pasa si quitamos invocando al constructor
de la clase Abuelo? Como se puede ver, el código se rompe. El cuarto tipo es herencia
jerárquica. Es una situación en la
que la clase equilibrada es heredada por
múltiples subclases. Ahora tenemos un vaso de barones
con dos clases infantiles. Recuerde, esas dos clases
derivadas pueden usar las funciones y características
de la clase de sus padres. No obstante, el niño uno no puede usar
funciones del canal dos. Hasta ahora tan bueno. Pueden usar las características de clase de los
padres y sus propias características. No obstante, en el momento en
que tratamos de usar una función del niño uno y niño dos, vamos a obtener un error. Y por último, el quinto
tipo, herencia híbrida. En este tipo las características de
más de un tiempo de herencia se mezclan para
formar herencia híbrida. Entonces veamos un ejemplo. Ahora vamos a crear
objetos de nuestras clases. Por último, veamos cómo podríamos juntar todo esto y crear
un programa de calculadora usando funciones de
programación orientadas a
objetos, declaraciones
f, y loops while. Primero, vamos a crear una clase de
calculadora para incluir todas nuestras operaciones
matemáticas. Ahora necesitaremos
crear un objeto para nuestra clase Calculadora para que
podamos empezar a usarlo. Ahora vamos a crear un
bucle while y configurarlo en true y pedirle al usuario que ingrese su operación
matemática deseada. La ventaja de usar el bucle
while aquí es que este programa seguirá funcionando a menos que el usuario elija cinco, que en este caso
tendremos que hacer una declaración F diciendo que la opción F
es igual a cinco, luego romper, que
romperá el bucle. De todos modos, continuemos
con nuestro programa y creemos una lógica para ello
usando declaraciones f. Esto asegurará que el usuario
haya introducido una elección válida. En primer lugar, vamos a comprobar si el
usuario quiere salir o no. Si no, entonces vamos
a pedir la entrada del usuario para seguir adelante
con los cálculos. Ahora vamos a crear una
declaración F LF para que coincida con su elección. Empecemos con agregar nuestro programa y ver
cómo se ve. Después presionamos F5,
debe salir. Pero nuestro programa
aún no es perfecto. Si el usuario ingresó
la cadena obtendrá un error de valor porque esposa y no
pudo convertir una
cadena en un entero. Entonces pongamos nuestras
habilidades de manejo de
excepciones para usar y
tratar con este adulto. Como se puede ver, esto funciona
manejando nuestro error, pero no vuelve a ejecutar
el programa para nosotros. Para eso, simplemente podemos
copiar pegar el código bajo el bloque excepto para que cuando
se ejecute también ejecute nuestro código. Ahora por supuesto, hay
fallas en este método. Por ejemplo, si el usuario ingresa una cadena en
otra ocasión
obtendrá un error
porque esperamos que maneje la celda solo una vez. Aquí es donde
entra en juego el reintento, pero no queremos
desviar demasiado el video. Entonces acabamos de armar con esto. En conclusión,
realmente no necesitas estar limitado por
un
estilo determinado y escrito a mano tanto
como deberías enfocarte en
mantener tu código estructurado. Lo que significa que debes seguir
tu propia estructura que se adapte a tus propias necesidades. Entonces eso es todo para el video de hoy. Muchas gracias por mirarte y espero
verte en la siguiente.
4. Métodos estáticos, métodos de clase, atributos de clase: Hola y bienvenidos de
nuevo a mi video. Hoy vamos a echar un
vistazo a métodos estáticos, métodos clase y atributos, comenzando con atributos de clase. Entonces, ¿qué son los atributos de clase? Un atributo de clase es una
variable que pertenece a una clase en lugar de
un objeto en particular. Entonces tomemos un ejemplo. Por lo que ahora hemos creado una
simple clase animal entonces
initará método en el que se
pasa el nombre del animal. Entonces vamos a crear una
instancia de esa clase. Podrías estar preguntando, ¿cuál es esta variable por
aquí, número de animales? Bueno, este es un atributo de clase. Y de inmediato lo que
lo hace un atributo de clase es que no se
usa a sí mismo como nombre. Entonces, ¿cuál es la diferencia
entre esta clase, atributo, número de animales y
algo así como nombre, por ejemplo, un nombre cambia
de instancia a instancia. Por ejemplo, A1 tendrá
un nombre diferente al A2. No obstante,
tanto A1 como A2 tendrán el mismo número de
animales, num de animales. No
depende de una instancia. Entonces por ejemplo, tanto es así que pude
derivar el animal, que los animales, y
todavía obtendría los mismos resultados. Lo que significa que puedo acceder a este
atributo de clase desde la
propia clase sin tener que crear una instancia como
esta por aquí. Entonces ahora que hemos
establecido que número de animales es un atributo de clase que aplica para toda
la clase. ¿ Qué podemos hacer con ella? En primer lugar, podemos hacer un seguimiento de cuántas instancias de nuestro animal de clase
se ha creado por orden, es decir,
cuántos animales tenemos. Entonces, por ejemplo, note
que usamos animal no-yo, lo contrario, nos habría
dado resultados diferentes. Entonces esa es la idea básica
detrás de los atributos de clase. Hay algunos usuarios
para ellos, por supuesto, como poder
definir una constante que se
desea utilizar para cualquier
instancia de esa clase. Entonces, por ejemplo,
tenías una clase de física con Lightspeed obviamente
siendo una constante. En lugar de
definirlo fuera de tu clase como una variable global. En cambio, puedes
definirlo dentro de tu clase como un
atributo de clase para que puedas
acceder a ella más fácilmente. Entonces, ¿por qué es esto un
mejor enfoque? Siempre queremos asegurarnos de que tus clases sean lo más
independientes posible. significa que si fueras a usar esta clase
en algún otro lugar en algún momento del tiempo, tiene todos sus
métodos y variables predefinidos en su interior y listas para ser usadas en otro lugar. Entonces así es como puedes usar atributos de
clase a
tu ventaja
creando cualquier variable que puedas necesitar dentro de la clase, en lugar de crearla
fuera como una variable global. Ahora hablemos de métodos
de clase. Entonces recuerda cómo incrementamos
num de animales por aquí. Cada vez que se creó una instancia del animal de
clase, podemos hacerlo un poco
definitivamente usando el método de clase. Así que vamos a crear un método de clase
y ver cómo se ve. Como se puede ver, usamos
TLS en lugar de auto. Ahora vamos a devolver
el número de animales. Lo que también tenemos que
hacer es usar un decorador de clase para denotar que este es en efecto
un método de clase. Por lo que ahora hemos creado un método de clase que devuelve
el número de animales. Necesitamos un
método de clase que agregue más uno una vez que se crea
un animal o una instancia. Así que vamos a crear
otro método de clase. Entonces, ¿cómo podemos usar el método de clase Add
animals? Por ejemplo, podemos quitar
animal ese número de
animales de nuestro método init y reemplazarlo por animales de anuncios. Ahora lo que esto
hará es que llamará
al método de clase agregar
animales cada vez. Y fue llamado, es decir,
cada vez que una instancia del animal de clase
ha creado como
A1, A2, utilizará el
método de clase y los animales. Entonces veamos si
esto funciona usando el método de clase
num animals,
debe volver a. Entonces eso fueron métodos de clase. Echemos un
vistazo a los métodos estáticos. Estas son algunas de las
características de los métodos estáticos. En primer lugar, está ligado a la clase. No puede modificar un estado de
clase u objeto, y no puede acceder ni modificar la clase y sus variables de
instancia. Así que a veces cuando estamos
creando un programa de calculadora, tendemos a definir métodos como si pudieras definir esos métodos dentro de una clase y tenerlos como métodos estáticos. Entonces por ejemplo, ahora podemos usar el decorador de
clase para denotar que este es
un método estático. Para usar esos métodos, en lugar de crear una instancia
de la calculadora de clases, podríamos acceder a ellos de
inmediato usando calculadora. Entonces para esos métodos, no
tengo que crear una instancia de la
calculadora de clase como esta. Y luego usa C1. Oh, lo siento. Simplemente podría usar la calculadora inmediato sin
tener que crear una instancia. Estoy de acuerdo en que algunos
podrían decir, Bueno, podrías haber definido esos
métodos a nivel mundial y haber usado anuncio de inmediato en lugar de
calculadora, como por ejemplo. Hay algunas
complicaciones a la misma. Y es principalmente
para mantener tu código más estructurado y organizado. Entonces eso es todo para el video de hoy. Muchas gracias por mirarte y espero
verte en la siguiente.
5. Importar clases: Hola y bienvenidos de
nuevo a mi video. Hoy estaremos echando un
vistazo a diferentes métodos. Puedes importar clases
hasta el programa, comenzando con el método más
sencillo en el que el archivo o clase que estás importando está dentro tu espacio de trabajo o directorio. Entonces aquí tenemos dos
archivos Python, hombres y test. Ambos están en el
mismo directorio. Entonces tenemos una clase, una prueba ese pastel que
queremos usar en main.py. Para que como se puede ver, test.py
tiene una clase llamada calculadora y
queremos importarlo. Y para comprar, para hacer eso,
haremos lo siguiente. En primer lugar, vamos a importar
el nombre del fichero. En este caso, es prueba. Entonces sigamos adelante
y abortemos la prueba. Entonces para usar la clase, igual que cualquier otra clase, tendrás que
crear una instancia de un objeto de esa clase. Entonces vamos a crear una
instancia de prueba. Como se puede ver cuando
escribo dot, me muestra que hay
una clase llamada calculadora que debo elegir
para empezar a usarla. Entonces escojamos calculadora. Ahora, al igual que cualquier instancia, podemos seguir adelante y usar sus
métodos y atributos. Como se puede ver,
funciona muy bien. Aviso Tuve que escribir el nombre
del archivo que es prueba, y luego elegir una cierta clase dentro de ese archivo,
que tiene calculadora. Eso significa que podría tener
múltiples clases dentro del archivo de prueba que podría
elegir. Por ejemplo. Ahora vamos a usar la clase de física. Entonces eso es asumir que
la clase que estamos importando está dentro de
nuestro directorio. ¿ Qué pasa si
quiero importar un archivo en clase en mi escritorio,
por ejemplo. Para ello,
primero importaremos el éxito. Entonces vamos a escribir CIS dot path. Entonces escribiremos la ubicación del archivo que vamos a importar. Podemos conocer la
ubicación de la phi dirigiéndose
al propio archivo. Haga clic con el botón derecho y luego
haga clic en Propiedades Ahora vamos a importar
el archivo en sí, que es archivo de prueba. Ahora para empezar a usarlo al igual que cualquier clase necesitamos
crear una instancia de la misma. Así que importé la clase
matemática y uso el método add para saber qué clase y
métodos tenemos en nuestro archivo. Simplemente podemos
abrirlo usando el Bloc de notas. Entonces lo que hicimos es importante. El archivo de prueba final luego creó una instancia de la clase
matemática a través del archivo de prueba. Entonces usamos el método
add dentro de esa clase. Entonces eso es todo para el video de hoy. Muchas gracias por mirarte y espero
verte en la siguiente.