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