Olá, fiz o código e verifiquei com o do professor e também fiz teste e mudanças, mas o código continua funcionando do jeito errado.
Mesmo sem passar o argumentos obrigatórios e fazendo suas verificações a classe Nota Fiscal é criada com none
no lugar dos argumentos não informados. Podem me ajudar? Me mostrar onde estou errando?
Código do builder:
from nota_fiscal import Item, NotaFiscal
from datetime import date
class CriadorDeNotaFiscal(object):
def __init__(self):
self.__razao_social = None
self.__cnpj = None
self.__data_de_emissao = date.today
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 com_detalhes(self, detalhes):
self.__detalhes = detalhes
return self
def constroi(self):
if not self.__razao_social:
raise Exception('Razão Social deve ser preenchida.')
if not self.__cnpj:
raise Exception('CNPJ deve ser preenchida.')
if not self.__itens:
raise Exception('Itens deve ser preenchida.')
return NotaFiscal(
razao_social = self.__razao_social,
cnpj = self.__cnpj,
itens = self.__itens,
data_de_emissao = self.__data_de_emissao,
detalhes = self.__detalhes)
Código Nota Fiscal:
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 NotaFiscal(object):
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 ValueError('Datalhe da nota não pode ter mais de 20 caracteres.')
else:
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
#########################################################################################################3
if __name__ == '__main__':
from criador_de_nota_fiscal import CriadorDeNotaFiscal
itens = [
Item('ITEM A', 100),
Item('ITEM B', 200)
]
nota_fiscal = NotaFiscal(
cnpj = 12345678912345,
detalhes = '',
data_de_emissao = date.today(),
itens = itens,
razao_social = 'Brasil Auto Motores, Ltda.',
)
nota_fiscal_criada_com_builder =(CriadorDeNotaFiscal()
.com_cnpj(12345678912345)
.com_data_de_emissao(date.today())
.com_razao_social('Brasil Auto Motores, Ltda.'))
print(nota_fiscal_criada_com_builder._CriadorDeNotaFiscal__itens)