2
respostas

Estou tentando converter o código da aula em Python 3 mas estou com problemas

Algum instrutor poderia por favor me ajudar a converter esse código da aula em python 3 e me explicar oq estou errando? Meu código está logo abaixo,

calculadora_de_impostos:

from impostos import ISS, ICMS, ICPP, IKCV

class Calculador_de_impostos():

    def realiza_calculo(self, orcamento, imposto):
        imposto_calculado = imposto.calcula(self, 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 2', 200))
    orcamento.adiciona_item(item('ITEM 3', 250))

    print('ISS 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:

import abc

class Template_de_imposto_condicional(metaclass=abc.ABCMeta):

    def calcula(self, orcamento):
        if self.deve_usar_maxima_taxacao(orcamento) == True:
            return self.maxima_taxacao(orcamento)
        else:
            return self.minima_taxacao(orcamento)

    @abc.abstractmethod
    def deve_usar_maxima_taxacao(self, orcamento):
        return

    @abc.abstractmethod
    def maxima_taxacao(self, orcamento):
        return

    @abc.abstractmethod
    def minima_taxacao(self, orcamento):
        return

class ISS():

    def calcula(self, orcamento):
        return orcamento.valor * 0.1

class ICMS():

    def calcula(self, orcamento):
        return orcamento.valor * 0.06

class ICPP(Template_de_imposto_condicional):

    def deve_usar_maxima_taxacao(self, orcamento):
        if orcamento.valor > 500:
            return True
        else:
            return False

    def maxima_taxacao(self, orcamento):
        print(orcamento.valor * 0.05)

    def minima_taxacao(self, orcamento):
        print(orcamento.valor * 0.07)

class IKCV(Template_de_imposto_condicional):

    def deve_usar_maxima_taxacao(self, orcamento):
        if orcamento.valor > 500 and self._tem_item_maior_que_100_reais(orcamento):
            return True
        else:
            return False

    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


O erro que está dando é esse:

Traceback (most recent call last):
  File "C:/Users/XPS/PycharmProjects/Design Patterns/calculadora_de_impostos.py", line 24, in <module>
    calculador.realiza_calculo(orcamento, ICPP)
  File "C:/Users/XPS/PycharmProjects/Design Patterns/calculadora_de_impostos.py", line 6, in realiza_calculo
    imposto_calculado = imposto.calcula(self, orcamento)
  File "C:\Users\XPS\PycharmProjects\Design Patterns\impostos.py", line 6, in calcula
    if self.deve_usar_maxima_taxacao(orcamento) == True:
AttributeError: 'Calculador_de_impostos' object has no attribute 'deve_usar_maxima_taxacao'
2 respostas

Coloque o que está dando de errado também, amigo :) Facilita pra quem está vendo sem poder testar seu código...

Já fiz as alterações necessárias Pedro! Obrigado pelo atendimento desde Já!