Coletânea Python do ZERO às Redes Neurais Artificiais
Sobreposição de Membros
Um dos cuidados que devemos ter ao manipular nossas classes em suas hierarquias e heranças é o fato de apenas realizarmos sobreposições quando de fato queremos alterar/sobrescrever um determinado dado/valor/método dentro da mesma.
Em outras palavras, anteriormente vimos que o interpretador do Python realiza a chamada leitura léxica do código, ou seja, ele lê linha por linha (de cima para baixo) e linha por linha (da esquerda para direita), dessa forma, podemos reprogramar alguma linha ou bloco de código para que na sequência de sua leitura/interpretação o código seja alterado.
Inicialmente criamos a classe Pessoa, dentro de si um método construtor que recebe um nome como atributo de classe. Também é definida uma Acao1 que por sua vez por meio da função print( ) exibe uma mensagem.
Em seguida é criada uma classe de nome Jogador1 que herda tudo de Pessoa e por sua vez, apenas tem um método Acao2 que exibe também uma determinada mensagem.
Por fim é criado uma classe SaveJogador1 que herda tudo de Jogador1 e de Pessoa.
Trabalhando sobre essa cadeia de classes, criamos uma variável de nome p1 que instancia SaveJogador1 e passa como parâmetro ‘Fernando’, pela hierarquia destas classes, esse parâmetro alimentará self.nome de Pessoa.
Por meio da função print( ) passando como parâmetros p1.nome o retorno é: Fernando.
Da mesma forma, instanciando qualquer coisa de dentro de qualquer classe da hierarquia, se não houver nenhum erro de sintaxe tudo será executado normalmente.
Nesse caso, o retorno é o apresentado na imagem acima.
Por fim, partindo para uma sobreposição de fato, note que agora em SaveJogador1 criamos um método de classe de nome Acao1, dentro de si uma função para exibir uma determinada mensagem.
Repare que Acao1 já existia em Pessoa, mas o que ocorre aqui é que pela cadeia de heranças SaveJogador1 criando um método Acao1 irá sobrepor esse método já criado anteriormente.
Em outras palavras, dada a hierarquia entre essas classes, o interpretador irá considerar pela sua leitura léxica a última alteração das mesmas, Acao1 presente em SaveJogador1 é a última modificação desse método de classe, logo, a função interna do mesmo irá ser executada no lugar de Acao1 de Pessoa, que será ignorada.
Finalmente temos como retorno o resultado apresentado na imagem
acima.