from validate_docbr imort CPF, CNPJ
class Documento:
@staticmethod
def cria_documento(documento):
if len(documento) == 11:
return DocCpf(documento)
elif len(documento) == 14:
return DocCnpj(documento)
else:
raise ValueError("Quantidade de dígitos incorreta!")
class DocCpf:
def __init__(self, documento):
if self.valida(documento):
self.cpf = documento
else:
raise ValueError("Cpf inválido!")
def __str__(self):
return self.format()
def valida(self, documento):
validador = CPF()
return validador.validate(documento)
def format(self):
mascara = CPF()
return mascara.mask(self.cpf)
class DocCnpj:
def __init__(self, documento):
if self.valida(documento):
self.cnpj = documento
else:
raise ValueError("Cnpj inválido!")
def __str__(self):
return self.format()
def valida(self, documento):
mascara = CNPJ()
return mascara.validate(documento)
def format(self):
mascara = CNPJ()
return mascara.mask(self.cnpj)
O primeiro erro que notei foi na linha
def format(self):
mascara = CPF()
return mascara.mask
A endentação está incorreta. O segundo erro, que inclusive achei esquisito, foi que durante a aula, o código rodou perfeitamente tanto para CPF quanto para CNPJ. Mas aqui no meu pc, ele roda corretamente apenas para CNPJ, para CPF funciona apenas se eu colocar a conversão de string no cria_documento, da seguinte forma:
class Documento:
@staticmethod
def cria_documento(documento):
documento = str(documento)
#Resto do Código
Se eu não faço isso, ele me retorna o seguinte erro:
TypeError: object of type 'int' has no len()