Código
from validate_docbr import CPF, CNPJ
class Documento:
def __init__(self, documento):
self.documento = documento
@staticmethod
def cria_documento(documento):
tipos_de_documentos = {
11: Doc_cpf,
14: Doc_cnpj,
20: Doc_qualquer,
}
if len(documento) in tipos_de_documentos:
tipo = tipos_de_documentos[len(documento)]
return tipo(documento)
else:
raise ValueError('Quantidade de dígitos invalidos')
class Doc_qualquer:
pass
class Doc_cpf:
def __init__(self, documento):
documento = str(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):
format = CPF()
return format.mask(self.cpf)
class Doc_cnpj(Documento):
def __init__(self, documento):
documento = str(documento)
if self.valida(documento):
self.cnpj = documento
else:
raise ValueError("CNPJ inválido!!")
def __str__(self):
return self.format()
def valida(self, documento):
validador = CNPJ()
return validador.validate(documento)
def format(self):
format = CNPJ()
return format.mask(self.cnpj)
Saída
Chamando variáveis no main.py:
from cpf_cnpj import Documento
cpf = '02947859731'
cnpj = '35379838000112'
doc = Documento.cria_documento(cpf)
doc2 = Documento.cria_documento(cnpj)
print(doc)
print(doc2)
Saída no Terminal:
029.478.597-31
35.379.838/0001-12
Minha Dúvida:
Na minha resolução, na função "cria_documento" eu fiz um dict(pois em teoria com um aumento de documentos seria mais fácil adiciona-los ao invés de encher de if's).
Porém, coloquei os valores da quantidade de caractere dos documentos como chave e o nome das funções como valores do dict, por conta de ser mais simples chamar as chaves depois através do tipo = tipos_de_documentos[len(documento)]
. Isso pode ser considerado uma má prática? Já que o mais obvio seria ter os nomes das funções como as chaves e os valores do tamanho do documento como valores.