Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Erro

Bom dia, quando tento executar o calculador_de_impostos.py dá o seguinte erro:

File "calculador_de_impostos.py", line 17, in <module>
    calculador_de_impostos.realiza_calculo(vamos, ICMS()) # imprime 50.0
TypeError: ICMS() takes exactly 1 argument (0 given)

Segue os programas abaixo:

# -*- coding: UTF-8 -*-
# calculador_de_impostos.py

class Calculador_de_impostos(object):

    def realiza_calculo(self, orcamento, imposto):
        valor = imposto.calcula(orcamento)     
        print valor  

if __name__ == '__main__':

    from imposto import ISS, ICMS     
    from orcamento import Orcamento

    vamos = Orcamento(500.0)
    calculador_de_impostos = Calculador_de_impostos()
    calculador_de_impostos.realiza_calculo(vamos, ICMS()) # imprime 50.0
    calculador_de_impostos.realiza_calculo(vamos, ISS()) # imprime 30.0
# -*- coding: UTF-8 -*-
# impostos.py

from orcamento import Orcamento

def ICMS(orcamento):
    def calcula_ICMS(object):
        return orcamento.valor * 0.1

def ISS(orcamento):
    def calcula_ISS(object):
        return orcamento.valor * 0.06
# -*- coding: UTF-8 -*-
# orcamento.py

class Orcamento(object):
    def __init__(self, valor):
        self.__valor = valor

    @property
    def valor(self):
        return self.__valor
5 respostas

Oi, Larissa. Parece que o erro está na chamada do ICMS, mas não consigo ver direito porque acho que parte do código foi "comida" pelo interpretador utilizado nas caixas de inserção de texto do fórum.

Se não botar o código entre ``` <codigo> ``` ele vai ser interpretado como um texto de markup e algumas linhas podem sumir, além de ficar muito confuso para ler.

Você pode ver mais sobre isso no botão ? formatação.

solução!

Ok, agora acho que eu entendi (acho que alguma coisa aconteceu entre a última vez que eu abri essa página porque eu não estava vendo o código formatado).

Em vez de declarar classes para ISS e ICMS você declarou duas funções, que recebem orcamento como parâmetro. E ao chamar essas funções sem parâmetros o compilador lança o erro TypeError: ICMS() takes exactly 1 argument (0 given)

Na verdade o que você provavelmente deve fazer são duas classes para ICMS e ISS e com as funções calcula_icsm e calcula_issdeclaradas dentro delas.

ou seja:

from orcamento import Orcamento

class ICMS(object):
    def calcula_ICMS(self, orcamento):
        return orcamento.valor * 0.1

class ISS(object):
    def calcula_ISS(self, orcamento):
        return orcamento.valor * 0.06

e na verdade nem precisa importar Orcamento no trecho acima.

Acho que faltou o Metodo no ISS() e no ICMS() seria ISS().calcula_ISS e ICMS().calcula_ICMS, não?

@Ricardo, você ta certim =)

O código da @LariV está assim:

from orcamento import Orcamento

def ICMS(orcamento):
    def calcula_ICMS(object):
        return orcamento.valor * 0.1

def ISS(orcamento):
    def calcula_ISS(object):
        return orcamento.valor * 0.06

E deveria ficar dessa forma:

class ISS(object):

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


class ICMS(object):

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

Se olhar bem o código da LariV, podemos ver que ela criou uma função dentre de uma outra função...