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

Dúvida referente a Aula 5

Boa noite, Estou tento dúvida referente ao código que segue abaixo, criei um código de acordo com o que foi passado na aula para testar o conhecimento! Criei primeiro a Classe Estados_da_venda que contem os métodos abstratos , depois as classes para troca de estados com cada método.

A classe Venda só possui o construtor com o estado a ser alterado, porem quando compilo o código ele nunca sai do estado que foi passado no inicio!

# -*- coding: UTF-8 -*-
from abc import ABCMeta, abstractmethod

class Estados_da_venda(object):

    __metaclass__ = ABCMeta

    @abstractmethod
    def aprovado(self, venda): pass

    @abstractmethod
    def reprovado(self, venda): pass

    @abstractmethod
    def entregue(self, venda): pass

    @abstractmethod
    def enviando(self, venda): pass

class Em_aprovacao(Estados_da_venda):

    def aprovado(self, venda):
        venda.estado_estado = Aprovado()

    def reprovado(self, venda):
        venda.estado_estado = Reprovado()

    def entregue(self, venda):
        raise Exception('Venda ainda em estado de aprovacao nao pode ser entregue')

    def enviando(self, venda):
        raise Exception('Venda em estado de aprovacao nao pode ser enviada')

class Aprovado(Estados_da_venda):

    def aprovado(self, venda):
        raise Exception('Venda ja aprovada')

    def reprovado(self, venda):
        raise Exception('Venda aprovado nao pode ser reprovada')

    def entregue(self, venda):
        raise Exception('O produto ainda nao foi enviado')

    def enviando(self, venda):
        venda.estado_estado = Enviando()

class Reprovado(Estados_da_venda):

    def aprovado(self, venda):
        raise Exception('Venda reprovada nao pode ser mais aprovada')

    def reprovado(self, venda):
        raise Exception('Venda ja reprovada')

    def entregue(self, venda):
        raise Exception('Venda reprovada nao pode ser entregue')

    def enviando(self, venda):
        raise Exception('Venda reprovada nao pode ser enviada')

class Entregue(Estados_da_venda):

    def aprovado(self, venda):
        raise Exception('Venda ja foi aprovada e entregue ao cliente')

    def reprovado(self, venda):
        raise Exception('Venda entregue nao pode mais ser reprovada')

    def entregue(self, venda):
        raise Exception('Venda ja entregue ao cliente')

    def enviando(self, venda):
        raise Exception('Venda ja enviada ao cliente')

class Enviando(Estados_da_venda):

    def aprovado(self, venda):
        raise Exception('Venda ja aprovada e sendo enviada ao cliente')

    def reprovado(self, venda):
        raise Exception('Venda ja a caminho do cliente nao pode mais ser reprovada')

    def entregue(self, venda):
        venda.estado_venda = Entregue()

    def enviando(self, venda):
        raise Exception('Venda ja sendo enviada')

class Venda(object):

    def __init__(self, item, valor):

        self.__item = item
        self.__valor = valor
        self.estado_venda = Em_aprovacao()

    def aprovado(self):
        self.estado_venda.aprovado(venda)

    def reprovado(self):
        self.estado_venda.reprovado(venda)

    def entregue(self):
        self.estado_venda.entregue(venda)

    def enviando(self):
        self.estado_venda.enviando(venda)

if __name__ == '__main__':

    venda = Venda('Qualquer', 1900)

    venda.aprovado()

    print venda.estado_venda
3 respostas
solução!

Oi, Igor. O erro está na sua classe Em_Aprovação: O método aprova está modificando um atributo "estado_estado" e não "estado_venda".

Ou pode modificar a última linha para estado_estado também, que vai ver que a venda foi aprovada. mas acho que esta não foi a sua intenção.

Obrigado Skywalker funcionou certo agora!