A saída no terminal mostra o objeto em si, ela não mostra os valores de desconto do imposto, mesmo com o print e return. O que eu fiz de errado e não vi?
Saída no terminal:
<bound method ICPP.maxima_taxacao of <impostos.ICPP object at 0x0000014BFD833FD0>>
<bound method IKCV.maxima_taxacao of <impostos.IKCV object at 0x0000014BFD833FD0>>
Códigos Imposto:
from abc import ABCMeta, abstractmethod
class PadraoDeImpostoCondicional(object):
__metaclass__ = ABCMeta
def calcula(self, orcamento):
if self.deve_usar_maxima_taxacao:
return self.maxima_taxacao
else:
return self.minima_taxacao
@abstractmethod
def deve_usar_maxima_taxacao(self, orcamento):
pass
@abstractmethod
def maxima_taxacao(self, orcamento):
pass
@abstractmethod
def minima_taxacao(self, orcamento):
pass
....
class ICPP(PadraoDemImpostoCondicional):
def deve_usar_maxima_taxacao(self, 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(PadraoDemImpostoCondicional):
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.1
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
else:
return False
Código main:
from impostos import ICPP, IKCV
class CalculadorDeImportos(object):
def reliza_calculo(self, orcamento, imposto):
imposto_calculado = imposto.calcula(orcamento)
print (imposto_calculado)
if __name__ == '__main__':
from orcamento import Orcamento, Item
orcamento = Orcamento()
calculador = CalculadorDeImportos()
orcamento.adicionar_itens(Item('Item 1', 250))
orcamento.adicionar_itens(Item('Item 2', 50))
orcamento.adicionar_itens(Item('Item 3', 100))
print('ICPP, IKCV')
calculador.reliza_calculo(orcamento, ICPP())
calculador.reliza_calculo(orcamento, IKCV())