Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Mostrando o meu código antes da Factory

from validate_docbr import CPF,CNPJ

class CpfCnpj():
    def __init__(self, document):
        self.cpf_or_cnpj = self.verify(document)
        self.validation_cpf_cnpj(document)
        if len(document) == 11:
            self.cpf = document
        elif len(document) == 14:
            self.cnpj = document

    def __str__(self):
        return self.format_cpf_cnpj()

    def validation_cpf_cnpj(self, document):
        if self.cpf_or_cnpj:
            return CPF().validate(document)
        else:
            return CNPJ().validate(document)

    def verify(self, document):
        # Se for CPF retorna True, se for CNPF retorna False, e se não for nenhum ele gera um erro
        if len(document) == 11:
            return True
        elif len(document) == 14:
            return False
        else:
            raise ValueError("Tamanho do documento inválido !")

    def format_cpf_cnpj(self):
        if self.cpf_or_cnpj:
            mask_cpf = CPF()
            return mask_cpf.mask(self.cpf)
        else:
            mask_cnpj = CNPJ()
            return mask_cnpj.mask(self.cnpj)
  • Só estou mostrando pq ele ficou "pequeno" em relação ao do professor. Mas com a Factory tudo fica mais simples, gostei : )
2 respostas
solução!

Olá Bruno, tudo bem com você?

Peço desculpas pela demora em lhe responder.

Meus parabéns pela implementação do código, fico feliz que tenha compartilhado com a comunidade do fórum Alura.

O código ficou bem compacto, uma dica sobre a declaração da classe CpfCnpj, não é necessário fazer o uso dos parênteses (), como essa classe não é uma classe filha; classe que herda atributos de outra classe (classe mãe), o uso dos parênteses será redundante, por boa prática não é colocado no momento da declaração. Ficando da seguinte forma.

class CpfCnpj:

Sobre o padrão Factory, deixo abaixo um artigo que poderá aprimorar ainda mais o seu conhecimento sobre o assunto.

O artigo está em inglês, caso tenha dificuldades com o idioma recomendo o uso do tradutor do navegador.

Fico à disposição.

Abraços e bons estudos.

Oi Felippe. Obrigado pela resposta e pela recomendação. Me ajudou bastante.

Forte abraço.