Então falamos sobre encapsulamento, sobre abstração, e sobre o terceiro pilar da esperança, é
chamado de herança e a herança permite que novos objetos assumam as propriedades de objetos existentes para que
você possa herdar classes.
Vamos dar uma olhada em um exemplo.
Vamos remover o código anterior que tínhamos e voltar ao nosso exemplo de jogo.
Queremos criar um novo jogo e temos diferentes tipos de usuários, então temos usuários que podem ser assistentes, que
podem ser elfos, que podem ser, não sei, arqueiros.
Mas todos esses usuários têm alguma funcionalidade comum.
E cada um dos subusuários, como magos, elfos, arqueiros, tem alguma funcionalidade comum compartilhada, mas,
novamente, diferentes ataques talvez.
Portanto, usando OLP, podemos realmente fazer herança.
Por exemplo, digamos que temos um usuário de classe aqui e esse usuário terá, digamos, uma função de assinatura.
Ou o método Sinon, mais uma vez, ele receberá a si mesmo e, por enquanto, assumiremos que temos algum
tipo de sinal aqui.
Então, digamos por agora, imprimir logado, porque para jogar, eles precisam estar logados.
OK, agora você deve estar se perguntando, onde está o método init aqui?
Não deveríamos ter aquele método init que é executado primeiro?
Bem, poderíamos, mas se não tivermos nenhuma variável ou atributo que desejamos atribuir ao usuário, bem, nesse caso teríamos
uma necessidade e um método.
Por enquanto, vamos apenas dizer que não precisamos de nada que o usuário tenha além deste método
de login.
Agora, digamos que queremos criar um monte de subclasses para que tenhamos um feiticeiro de classes.
E por enquanto, vamos apenas fazer uma passagem aqui para que não tenhamos uma classe vazia, mas ainda nos permitirá
construí-la.
E então vamos dizer que também temos uma aula.
Archer, isso vai passar também.
Vou garantir que temos colchetes aqui.
Agora, aqui está a coisa.
Idealmente, todos esses assistentes e arqueiros também são usuários, certo?
Portanto, temos usuários.
E esses usuários podem ter vários formulários, podem ser assistentes, podem ser arqueiros.
Eles podem ser ogros, todos os personagens do nosso jogo.
Mas todos eles, digamos, precisam ser registrados primeiro, como podemos ter certeza de que todos esses usuários ou classes
também tenham acesso para fazer login?
Bem, podemos usar herança e como fazemos herança com bastante facilidade, na verdade, tudo o que fazemos é
passar o colchete da classe pai da qual queremos herdar.
Então, digamos que eu faça yuzu aqui.
Agora, vamos clicar em executar aqui.
Sem erros.
Tudo parece bem.
E, a propósito, você vê que a linha verde aqui me diz que o recuo não é um múltiplo de quatro porque
o recuo deve ser quatro em Python.
Então, podemos apenas fazer isso.
Mas gosto de mantê-lo menor para facilitar a leitura.
OK, então vamos instanciar uma classe aqui, vou criar um assistente e dizer.
Wizard e execute aquela classe de wizard.
Agora, se eu imprimir aqui e fizer, digamos assistente de impressão.
Se eu clicar, corra.
Vejo que o objeto do assistente foi criado e e se eu não entrar?
Vejo que sim, está realmente lá se eu fizer login e clicar em executar.
Ei, estou logado.
Que legal que herdei da classe de usuário essa funcionalidade.
E isso é muito, muito poderoso porque agora eu posso estender meu Wizzard, certo, então
vamos dizer que este mago tem um inato.
Método.
Que será executado quando o assistente for criado e terá um.
Nome.
E o poder que obtemos.
E aqui, atribuiremos o nome próprio a um nome igual e o poder autodidata a um poder igual.
E vamos adicionar outro método.
Chamando isso de ataque.
E esse método de ataque simplesmente imprimirá uma string F.
Isso vai dizer.
Atacando com.
Desligar.
Digamos poder autodidata.
E então faremos o mesmo com o Arqueiro, então copiarei este código.
Colado aqui e o Arqueiro terá nome.
E vamos dizer que em vez de poder, vamos dizer que tem, vamos dizer.
Número de Harrow's.
E número de flechas.
Será o novo atributo que ele obterá e então o ataque terá, bem, atacando com flechas.
E então teremos setas restantes.
Uma seta para a esquerda dirá apenas o número de erros e podemos fazer algo divertido onde as setas diminuem a cada vez
que você ataca.
OK, agora que temos isso, vamos torná-lo um pouco menor, para que você possa ver.
Ai está.
Agora que temos isso, vamos instanciar o primeiro Schwyzer.
Com.
Digamos Maalin com a potência de 50.
E então o arqueiro.
Seremos instanciados.
Como Robin com, digamos, quinhentos heróis ou menos a cem horas.
Então agora o mago e o arqueiro vão ter.
Bem, eles terão o login.
Mas eles também terão o ataque, mas exclusivo para cada um deles.
Aulas.
E também terão propriedades diferentes.
Vamos dar uma olhada se eu faria Wizard Dot.
Senhor. Bruxo.
Um ponto.
E eu direi.
Ataque.
E deixe-me voltar.
Minha inteligência de código.
Veremos que temos alguns erros.
Aqui, o que é isso dizer, nome indefinido self, e isso é porque eu me esqueci e os colchetes.
Então você se lembra de que sempre temos que dar o primeiro parâmetro self.
Se rolarmos para baixo e formos para Wizard Dot, veremos que temos nome, poder e ataque.
Se eu clicar em ataque aqui e corro.
Vemos que estou atacando com potência de 50 se eu fizer um ataque de arqueiro ponto.
Nesse caso, vou atacar com flechas, flechas sobrando cem.
Mas ambos têm a função de login ao mesmo tempo.
Que legal é que esse é o poder da herança.
Estamos mantendo nosso código seco, certo, estamos abstraindo a parte do código que ambos compartilham, mas mudando
as coisas de acordo com o que cada um precisa.
Então, por exemplo, eu poderia ter métodos e propriedades diferentes no Wizzard do que no Archer, mas
também ter uma funcionalidade de usuário do usuário compartilhada que eles têm e, dessa forma, manter seu código organizado e limpo.
Agora, vamos trazer de volta o zoom para que você possa ver com clareza.
Agora, essa ideia de herança é muito, muito poderosa.
E a chave aqui é que temos uma classe de pareamento e aulas para crianças.
Agora, às vezes essas classes filhas são chamadas de subclasses ou classes derivadas porque são subclasses de
usuário ou derivadas da classe de usuário.
Vamos explorar esse assunto um pouco mais no próximo vídeo.