Tentei fazer a máscara de CNPJ antes de assistir ao vídeo como um desafio me baseando na máscara de CPF.
Fiz diferente do vídeo.
Ao invés de criar um outro método formata_cnpj()
e fazer uma lógica dentro de __str__()
, para decidir qual dos dois métodos chamar formata_cnpj()
ou formata_cpf()
, eu troquei o nome do método que formatava CPF para formata_documento()
e nela, ficou a lógica que decide se é CPF ou CNPJ .
E para a minha alegria.... Funcionou!!!
A dúvida é: (nem sei formular direito a pergunta...)
Poderia dar algum problema futuro, pensando que fosse um projeto real em uma empresa grande? Sei lá, algum problema no tempo de execução...? Ou no consumo de memória...?
Segue o meu código para análise da pessoa bondosa, que vai ter paciência de tentar entender a minha pergunta, que eu não sei se consegui formular direito (e juro que tentei melhor que isso...)
from validate_docbr import CPF, CNPJ
class CpfCnpj:
def __init__(self, documento, tipo_documento):
self.tipo_documento = tipo_documento
documento = str(documento)
if tipo_documento.lower() == "cpf":
if self.cpf_eh_valido(documento):
self.cpf = documento
else:
raise ValueError("CPF inválido!!!")
elif self.tipo_documento.lower() == "cnpj":
if self.cnpj_eh_valido(documento):
self.cnpj = documento
else:
raise ValueError("CNPJ inválido!!!")
else:
raise ValueError("Documento inválido!!!")
def __str__(self):
return self.formata_documento()
def cpf_eh_valido(self, documento):
if len(documento) == 11:
validador = CPF()
return validador.validate(documento)
else:
raise ValueError("Quantidade de dígitos inválida!!!")
def formata_documento(self):
if self.tipo_documento.lower() == "cpf":
mascara = CPF()
return mascara.mask(self.cpf)
elif self.tipo_documento.lower() == "cnpj":
mascara = CNPJ()
return mascara.mask(self.cnpj)
def cnpj_eh_valido(self, cnpj):
if len(cnpj) == 14:
validate_cnpj = CNPJ()
return validate_cnpj.validate(cnpj)
else:
raise ValueError("Quantidade de dígitos inválida!!!")