11.2 Reescrita De Métodos

Todo fim de ano, os funcionários do nosso banco recebem uma bonificação. Os funcionários comuns recebem 10% do valor do salário e os gerentes, 15%.

Vamos ver como fica a classe Funcionario :

class Funcionario:
python
def __init__(self, nome, cpf, salario): self._nome = nome
 
self._cpf = cpf self._salario = salario
 
# outros métodos e properties def get_bonificacao(self):
 
return self._salario \* 0.10
 
Se deixarmos a classe Gerente como ela está, ela vai herdar o método get_bonificacao()
 
gerente = Gerente('José', '222222222-22', 5000.0, '1234', 0)
 
java
print(gerente.get_bonificacao())

O resultado aqui será 500. Não queremos essa resposta, pois o gerente deveria ter 750 de bônus nesse caso. Para consertar isso, uma das opções seria criar um novo método na classe Gerente , chamado, por exemplo, get_bonificacao_do_gerente() . O problema é que teríamos dois métodos em Gerente , confundindo bastante quem for usar essa classe, além de que cada um gerenciaria uma resposta diferente.

No Python, quando herdamos um método, podemos alterar seu comportamento. Podemos

reescrever (sobrescrever, override) este método, assim como fizemos com o init :

class Gerente(Funcionario):
python
def __init__(self, nome, cpf, salario, senha, qtd_gerenciaveis): super(). init (nome, cpf, salario)
 
self._senha = senha self._qtd_gerenciaveis = qtd_gerenciaveis
 
def get_bonificacao(self): return self._salario \* 0.15
 
# metodos e properties
 
Agora, o método está correto para o Gerente . Refaça o teste e veja que o valor impresso é o correto (750):
 
gerente = Gerente('José', '222222222-22', 5000.0, '1234', 0)
 
java
print(gerente.get_bonificacao())

Utilize o método vars() para acessar os atributos de Gerente e ver que a classe herda todos os atributos de Funcionario :

funcionario = Funcionario(‘João’, ‘111111111-11’, 2000.0) print(vars(funcionario))

gerente = Gerente(‘José’, ‘222222222-22’, 5000.0, ‘1234’, 0)

print(vars(gerente))

Saída:‌

{‘_salario’: 2000.0, ‘_nome’: ‘João’, ‘_cpf’: ‘111111111-11’}

{‘_cpf’: ‘222222222-22’, ‘_salario’: 5000.0, ‘_nome’: ‘José’, ‘_qtd_funcionarios’: 0, ‘_senha’: ‘1234’

}


⬅️ Capítulo Anterior | Próximo Capítulo ➡️