Opa, eu novamente. Esse é o código final do exercício que tem o IF do mal lá:
# -*- coding: UTF-8 -*-
from descontos import Desconto_por_cinco_itens, Desconto_por_mais_de_quinhentos_reais, Sem_desconto
class Calculador_de_descontos(object):
def calcula(self, orcamento):
desconto = Desconto_por_cinco_itens(
Desconto_por_mais_de_quinhentos_reais(
Sem_desconto()
)
)
return desconto.calcula(orcamento)
if __name__ == '__main__':
from orcamento import Orcamento, Item
orcamento = Orcamento()
orcamento.adiciona_item(Item('Item A', 100.0))
orcamento.adiciona_item(Item('Item B', 50.0))
orcamento.adiciona_item(Item('Item C', 400.0))
calculador_de_descontos = Calculador_de_descontos()
desconto = calculador_de_descontos.calcula(orcamento)
print 'Desconto calculado : %s' % (desconto)
# imprime 38.5
Como seria a mesma coisa sem precisar usar esse if?
Seu arquivo calculador_de_descontos.py
ficaria assim:
# -*- coding: UTF-8 -*-
from descontos import Desconto_por_cinco_itens, Desconto_por_mais_de_quinhentos_reais, Sem_desconto
class Calculador_de_descontos(object):
def calcula(self, orcamento):
desconto = Desconto_por_cinco_itens(
Desconto_por_mais_de_quinhentos_reais(
Sem_desconto()
)
)
return desconto.calcula(orcamento)
Ok, mas agora, como faço para criar calcular impostos? Precisa de um objeto da classe Calculador_de_impostos
e um da classe Orcamento
. Eu preciso criar agora outro módulo, vou chamar de main.py
. Nele eu preciso importar :orcamento.py
e calculador_de_impostos.py
#mainpy
from orcamento import Orcamento, Item
from calculador_de_impostos import Calculador_de_impostos
orcamento = Orcamento()
orcamento.adiciona_item(Item('Item A', 100.0))
orcamento.adiciona_item(Item('Item B', 50.0))
orcamento.adiciona_item(Item('Item C', 400.0))
calculador_de_descontos = Calculador_de_descontos()
desconto = calculador_de_descontos.calcula(orcamento)
print 'Desconto calculado : %s' % (desconto)
# imprime 38.5
Veja que o código que está nesse novo arquivo é o conteúdo que estava dentro do IF
, com a diferença que tive que importar calculador_de_impostos.py
.
Agora, para rodar o meu código, eu preciso executar main.py
:
python main.py
Mas já imaginou aprender python e para cada classe que você criar ter que criar um arquivo main1.py
, main2.py
, etc? Para facilitar a vida do aluno e, no seu caso, fico triste que acabou complicando para você, usamos esse IF.
Agora, vamos voltar a uma pergunta que você me fez. Quando a variável name
testada no IF tem valor diferente de main
? Quando o arquivo é importado em outro. Só vai ter main se você executar o arquivo pelo terminal em Python.
Vejamos um exemplo. Até aqui tudo bem? Agora vamos voltar para o cenário onde seu calculador_de_impostos.py
tem o IF:
# -*- coding: UTF-8 -*-
from descontos import Desconto_por_cinco_itens, Desconto_por_mais_de_quinhentos_reais, Sem_desconto
class Calculador_de_descontos(object):
def calcula(self, orcamento):
desconto = Desconto_por_cinco_itens(
Desconto_por_mais_de_quinhentos_reais(
Sem_desconto()
)
)
return desconto.calcula(orcamento)
if __name__ == '__main__':
from orcamento import Orcamento, Item
orcamento = Orcamento()
orcamento.adiciona_item(Item('Item A', 100.0))
orcamento.adiciona_item(Item('Item B', 50.0))
orcamento.adiciona_item(Item('Item C', 400.0))
calculador_de_descontos = Calculador_de_descontos()
desconto = calculador_de_descontos.calcula(orcamento)
print 'Desconto calculado : %s' % (desconto)
# imprime 38.5
Beleza, mas mesmo assim, ele tendo o IF e eu podendo executar calculador_de_impostos.py
pelo terminal, eu quero criar o main.py
e importá-lo. Coisa de doido, mas quero fazer isso mesmo:
#main.py
from orcamento import Orcamento, Item
from calculador_de_impostos import Calculador_de_impostos
orcamento = Orcamento()
orcamento.adiciona_item(Item('Item A', 100.0))
orcamento.adiciona_item(Item('Item B', 50.0))
orcamento.adiciona_item(Item('Item C', 400.0))
calculador_de_descontos = Calculador_de_descontos()
desconto = calculador_de_descontos.calcula(orcamento)
print 'Desconto calculado : %s' % (desconto)
# imprime 38.5
Veja que em main.py
estou importando o módulo calculador_de_impostos.py
. Caramba, será que aquele código dentro do IF será executado? Nesse caso não, porque quando usamos import
de um módulo, aquela variável name
será vazia e se é vazia não será igual a main
, correto? Se não é igual main
aquele código nunca será executado.
Clareou um pouquinho mais?