Así que hemos hablado de encapsulación, de abstracción, ¿qué pasa con el tercer pilar de la
esperanza? Se llama herencia y la herencia permite que los nuevos objetos adquieran las propiedades de los objetos existentes para
que puedas heredar clases.
Echemos un vistazo a un ejemplo.
Eliminemos el código anterior que teníamos y volvamos a nuestro ejemplo de juego.
Queremos crear un nuevo juego y tenemos diferentes tipos de usuarios, así que tenemos usuarios que pueden ser magos, que
pueden ser elfos, que pueden ser, no sé, arqueros.
Pero todos estos usuarios tienen alguna funcionalidad común.
Y cada uno de los subusuarios, como magos, elfos, arqueros, tiene alguna funcionalidad compartida en común, pero, de
nuevo, tal vez diferentes ataques.
Entonces, usando OLP, realmente podemos hacer herencia.
Por ejemplo, digamos que tenemos un usuario de clase aquí y este usuario tendrá, digamos, una función de firma.
O el método Sinon, una vez más, se va a recibir a sí mismo y entonces, por ahora, asumiremos que tenemos algún
tipo de señal aquí.
Por lo tanto, digamos que por ahora, imprima con la sesión iniciada, porque para poder jugar un juego, ellos deben estar conectados.
Bien, ahora se estará preguntando, oh, ¿dónde está el método init aquí?
¿No deberíamos tener ese método init que se ejecuta primero?
Bueno, podríamos, pero si no tenemos ninguna variable o atributo que queramos asignarle al usuario, bueno, en ese caso
tendríamos una necesidad y un método.
Entonces, por ahora, solo diremos que no necesitamos que el usuario no tenga nada más que este método de inicio
de sesión.
Ahora, digamos que queremos crear un montón de subclases para tener un asistente de clases.
Y por ahora, solo haremos un pase aquí para que no tengamos una clase vacía, pero aún nos permitirá
construirla.
Y luego digamos que también tenemos una clase.
Archer, eso también pasará.
Me aseguraré de que tengamos corchetes aquí.
Ahora, aquí está la cuestión.
Idealmente, todos estos magos y arqueros también son usuarios, ¿verdad?
Entonces tenemos usuarios.
Y estos usuarios pueden tener múltiples formas, pueden ser magos, pueden ser arqueros.
Pueden ser ogros, todos los personajes de nuestro juego.
Pero todos ellos, digamos, tienen que iniciar sesión primero, ¿cómo podemos asegurarnos de que todos estos usuarios o clasis
también tengan acceso para iniciar sesión?
Bueno, podemos usar la herencia y cómo hacemos la herencia con bastante facilidad, en realidad, todo lo que hacemos es
en el paréntesis pasar la clase principal de la que queremos heredar.
Así que digamos que hago yuzu aquí.
Ahora, hagamos clic en ejecutar aquí.
Sin errores.
Todo luce bien.
Y, por cierto, ves que la línea verde aquí me dice que la sangría no es un múltiplo de cuatro porque
la sangría debería ser cuatro en Python.
Entonces podemos hacer esto.
Pero me gusta mantenerlo más pequeño para que sea más fácil de leer.
Bien, vamos a crear una instancia de una clase aquí, voy a crear un asistente y luego diré.
Asistente y ejecute esa clase de asistente.
Ahora, si imprimo aquí y lo hago, digamos asistente de impresión.
Si hago clic, corre.
Veo que se ha creado el objeto del asistente y ¿qué sucede si no inicio sesión?
Veo que sí, en realidad está ahí si inicio sesión y hago clic en ejecutar.
Oye, estoy conectado.
Qué bueno es que heredé de la clase de usuario esta funcionalidad.
Y esto es muy, muy poderoso porque ahora puedo extender mi Wizzard, ¿verdad?
Digamos que este asistente tiene un innato.
Método.
Que se ejecutará cuando se cree el asistente y tendrá una extensión.
Nombre.
Y el poder que obtenemos.
Y aquí, asignaremos el nombre propio a un nombre igual y luego el poder autodidacta a un poder igual.
Y agreguemos también otro método.
Llamándolo ataque.
Y este método de ataque simplemente imprimirá una cadena F.
Eso dirá.
Atacando con.
El poder de.
Digamos poder autodidacta.
Y luego haremos lo mismo con el Archer, así que voy a copiar este código.
Pegado aquí y el arquero tendrá nombre.
Y digamos que en lugar de poder, diremos que tiene digamos.
Número de Harrow's.
Y número de flechas.
Será el nuevo atributo que obtenga y luego el ataque lo tendrá, bueno, atacar con flechas.
Y luego nos quedarán flechas.
Una flecha hacia la izquierda solo dirá el número de errores y podemos hacer algo divertido donde las flechas disminuyen cada vez
que ataca.
Bien, ahora que tenemos esto, hagámoslo un poco más pequeño, para que pueda verlo.
Ahí tienes.
Ahora que tenemos esto, creemos una instancia del primer Schwyzer.
Con.
Digamos Maalin con el poder de 50.
Y luego el arquero.
Seremos instancias.
Como Robin con, digamos, quinientos héroes o menos a cien horas.
Así que ahora el mago y el arquero van a tener.
Bueno, tendrán el registro.
Pero también tendrán el ataque, pero exclusivo de su individuo.
Clases.
Y también tendrán diferentes propiedades.
Echemos un vistazo si tuviera que hacer Wizard Dot.
Señor. Mago.
Un punto.
Y lo diré.
Ataque.
Y déjame volver.
Mi inteligencia de código.
Veremos que tenemos algunos errores.
Aquí, qué es lo que dice, nombre indefinido del yo, y eso es porque me olvidé de mí mismo y de los corchetes.
Entonces recuerde que siempre tenemos que dar el primer parámetro self.
Si nos desplazamos hacia abajo y vamos a Wizard Dot, vemos que tenemos nombre, poder y ataque.
Si hago clic en atacar aquí y corro.
Vemos que estoy atacando con un poder de 50 si hago un ataque de un punto al arquero.
En ese caso, me atacaré con flechas, las flechas quedan cien.
Pero ambos tienen la función de inicio de sesión al mismo tiempo.
Qué genial es que este es el poder de la herencia.
Mantenemos nuestro código seco, correcto, abstraemos la parte del código que ambos comparten, pero luego cambiamos
las cosas de acuerdo con lo que cada uno necesita.
Entonces, por ejemplo, podría tener diferentes métodos y propiedades en Wizzard que en Archer, pero también
tener una funcionalidad de usuario compartida que ellos tienen y de esta manera mantiene su código organizado y limpio.
Ahora, volvamos a acercar el zoom para que puedas verlo con claridad.
Ahora bien, esta idea de la herencia es realmente poderosa.
Y la clave aquí es que tenemos una clase de pareja y clases para niños.
Ahora bien, a veces estas clases secundarias se denominan subclases o clases derivadas porque son subclases de usuario o
se derivan de la clase de usuario.
Exploremos este tema un poco más en el siguiente video.