No caso da utilização do modelo Build, como faço para listar (print) os dados da nota
# -*- coding: UTF-8 -*-
# criador_de_nota_fiscal.py
#este é um objeto criado no modelo utilizando Builder
from datetime import date
from nota_fiscal import Nota_fiscal, Item
class Criador_de_nota_fiscal(object):
def __init__(self):
self.__razao_social = None
self.__cnpj = None
self.__data_de_emissao = None
self.__detalhes = ''
self.__itens = None
def com_razao_social(self, razao_social):
self.__razao_social = razao_social
return self
def com_cnpj(self, cnpj):
self.__cnpj = cnpj
return self
def com_data_de_emissao(self, data_de_emissao):
self.__data_de_emissao = data_de_emissao
return self
def com_itens(self, itens):
self.__itens = itens
return self
def constroi(self):
if self.__razao_social is None:
raise Exception('Razão social deve ser preenchida')
if self.__cnpj is None:
raise Exception('CNPJ deve ser preenchido')
if self.__itens is None:
raise Exception('Itens deve ser preenchido')
if self.__data_de_emissao is None:
self.__data_de_emissao = date.today()
if self.__detalhes is None:
self.__detalhes = ''
return Nota_fiscal(
razao_social=self.__razao_social,
cnpj=self.__cnpj,
itens=self.__itens,
data_de_emissao=self.__data_de_emissao,
detalhes = self.__detalhes
)
----
# -*- coding: UTF-8 -*-
# nota_fiscal.py
#este é um modelo de tradicional de criação de objetos no python
#no arquivo criador_de_nota_fiscal.py sera implementado um modelo utilizando Builder
from datetime import date
class Item(object):
def __init__(self, descricao, valor):
self.__descricao = descricao
self.__valor = valor
@property
def descricao(self):
return self.__descricao
@property
def valor(self):
return self.__valor
class Nota_fiscal(object):
#a informação nos parametros data_de_emissão e detalhes, indica que são parametros opcionais
#atenção parametros opcionais, no construtor, sempre deve ser informado por ultimo,
#caso contrario vai dar erro na execução da aplicação
def __init__(self, razao_social, cnpj, itens, data_de_emissao=date.today, detalhes=''):
self.__razao_social = razao_social
self.__cnpj = cnpj
self.__data_de_emissao = data_de_emissao
if len(detalhes) > 20:
raise Exception('Detalhes da nota não pode ter mais do que 20 caracteres')
self.__detalhes = detalhes
self.__itens = itens
@property
def razao_social(self):
return self.__razao_social
@property
def cnpj(self):
return self.__cnpj
@property
def data_de_emissao(self):
return self.__data_de_emissao
@property
def detalhes(self):
return self.__detalhes
if __name__ == '__main__':
from criador_de_nota_fiscal import Criador_de_nota_fiscal
itens=[
Item(
'ITEM A',
100
),
Item(
'ITEM B',
200
)
]
#neste formato poderemos ter problema se inverterem a ordem dos parametros
#para evitar este tipo de erro, colocamos parametros nomeados e neste caso
#a ordem que foi informado não importa
#nota_fiscal = Nota_fiscal(
# 'FHSA Limitada',
# '012345678901234',
# itens,
# date.today(),
# ''
#)
nota_fiscal = Nota_fiscal(
cnpj='012345678901234',
razao_social='FHSA Limitada',
itens= itens,
data_de_emissao=date.today(),
detalhes=''
)
print 'Nota Criada pelo modelo convencional'
print nota_fiscal.razao_social
print nota_fiscal.cnpj
print nota_fiscal.detalhes
#para passar parametros neste formato tem que estar entre parenteses
nota_fiscal_criada_com_builder = (Criador_de_nota_fiscal()
.com_razao_social('FHSA Limitada xx')
.com_cnpj('012345678901234')
.com_itens(itens)
.constroi)
print 'Nota Criada pelo modelo Builder'