Recebo o erro informado abaixo.
MacBook-Pro-de-Silvanio:patterns silvanioduartedacruz$ python calculador_de_impostos.py
INSS e ICMS
50.0
30.0
ICPP e IKCV
Traceback (most recent call last):
File "calculador_de_impostos.py", line 29, in <module>
calculador.realiza_calculo(orcamento, ICPP())
File "calculador_de_impostos.py", line 10, in realiza_calculo
imposto_calculado = imposto.calcula(orcamento)
AttributeError: 'ICPP' object has no attribute 'calcula'
MacBook-Pro-de-Silvanio:patterns silvanioduartedacruz$
calculador de impostos.py
# -*- coding: UTF-8 -*-
from impostos import ISS, ICMS, IKCV, ICPP
class Calculador_de_impostos(object):
def realiza_calculo(self, orcamento, imposto):
imposto_calculado = imposto.calcula(orcamento)
print imposto_calculado
if __name__ == '__main__':
from orcamento import Orcamento, Item
calculador = Calculador_de_impostos()
orcamento = Orcamento()
orcamento.adiciona_item(Item('ITEM 1', 50))
orcamento.adiciona_item(Item('ITEM 1', 200))
orcamento.adiciona_item(Item('ITEM 1', 250))
print 'INSS e ICMS'
calculador.realiza_calculo(orcamento, ISS())
calculador.realiza_calculo(orcamento, ICMS())
print 'ICPP e IKCV'
calculador.realiza_calculo(orcamento, ICPP())
calculador.realiza_calculo(orcamento, IKCV())
Impostos.py
from abc import ABCMeta, abstractmethod
class Template_de_imposto_condicional(object):
__metaclass__ = ABCMeta
def calcula(self, orcamento):
if self.deve_usar_maxima_taxacao(orcamento):
return self.maxima_taxacao(orcamento)
else:
return self.minima_taxacao(orcamento)
@abstractmethod
def deve_usar_maxima_taxacao(self, orcamento):
pass
@abstractmethod
def maxima_taxacao(self, orcamento):
pass
@abstractmethod
def minima_taxacao(self, orcamento):
pass
class ISS(object):
def calcula(self, orcamento):
return orcamento.valor * 0.1
class ICMS(object):
def calcula(self, orcamento):
return orcamento.valor * 0.06
class ICPP(object):
def deve_usar_maxima_taxacao(orcamento):
return orcamento.valor > 500
def maxima_taxacao(self, orcamento):
return orcamento.valor * 0.07
def minima_taxacao(self, orcamento):
return orcamento.valor * 0.05
class IKCV(object):
def deve_usar_maxima_taxacao(self, orcamento):
return orcamento.valor > 500 and self.__tem_item_maior_que_100_reais(orcamento)
def maxima_taxacao(self, orcamento):
return orcamento.valor * 0.10
def minima_taxacao(self, orcamento):
return orcamento.valor * 0.06
def __tem_item_maior_que_100_reais(self, orcamento):
for item in orcamento.obter_itens():
if item.valor > 100:
return True
return False