12.4 Exercícios - Mix-Ins
- Nosso banco precisa tributar dinheiro de alguns bens que nossos clientes possuem. Para isso vamos criar uma classe Tributavel com um método que devolve o imposto sobre a conta:
class Tributavel:
python
def get_valor_imposto(self): pass
Lemos essa classe da seguinte maneira: “Todos que quiserem ser tributáveis precisam saber retornar o valor do imposto”. Alguns bens são tributáveis e outros não. Por exemplo: ContaPoupanca não é tributável, já para ContaCorrente você precisa pagar 1% da conta e o SeguroDeVida tem uma
faixa fixa de 50 reais mais 5% do valor do seguro.
- Transforme a classe Tributavel em um mix-in:
class TributavelMixIn:
python
def get_valor_imposto(self) pass
- Faça a classe ContaCorrente herdar da classe TributavelMixIn e implemente o método “exigido” pelo MixIn:
class ContaCorrente(Conta, TributavelMixIn): # código omitido
python
def get_valor_imposto(self): return self._saldo \* 0.01
- Crie a classe SeguroDeVida que vai herdar de TributavelMixIn . Crie seus respectivos atributos e implemente o método do MixIn:
class SeguroDeVida(TributavelMixIn):
python
def __init__(self, valor, titular, numero_apolice): self._valor = valor
self._titular = titular self._numero_apolice = numero_apolice
def get_valor_imposto(self): return 50 + self._valor \* 0.05
5. Vamos criar a classe ManipuladorDeTributaveis em um arquivo chamado *manipulador.py*. Essa classe deve ter um método chamado calcula_impostos() que recebe uma lista de tributáveis e retorna o total de impostos cobrados:
python
class ManipuladorDeTributaveis:
python
def calcula_impostos(self, lista_tributaveis): total = 0
for t in lista_tributaveis:
total += t.get_valor_imposto() return total
6. Ainda no arquivo manipulador.py , vamos testar o código. Crie alguns objetos de ContaCorrente e de SeguroDeVida . Em seguida, crie uma lista de tributáveis e insira seus objetos nela. Instancie um ManipuladorDeTributaveis e chame o método calcula_impostos() passando a lista de tributáveis criada e imprima o valor total dos impostos:
java
if name == ' main ':
pythonfrom conta import ContaCorrente, SeguroDeVida, TributavelMixIn
cc1 = ContaCorrente('123-4', 'João', 1000.0) cc2 = ContaCorrente('123-4', 'José', 1000.0) seguro1 = SeguroDeVida(100.0, 'José', '345-77')
seguro2 = SeguroDeVida(200.0,'Maria', '237-98')
lista_tributaveis = [] lista_tributaveis.append(cc1) lista_tributaveis.append(cc2) lista_tributaveis.append(seguro1) lista_tributaveis.append(seguro2)
manipulador = ManipuladorDeTributaveis()
total = manipulador.calcula_impostos(lista_tributaveis) print(total)
Vimos que herança múltipla pode ser perigosa, e se nosso sistema crescer pode gerar muita confusão e conflito de nomes de métodos. Uma maneira mais eficaz nestes casos é usar classes abstratas como interfaces, que veremos a seguir.