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á aparecendo é 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'