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

Erro ao imprimir

Quando eu imprimo a representação da função instanciada ele retorna a classe: <class 'Cpf_Cnpj.DocCnpj'> Ao invés da representação de string já com a máscara. Mas não consigo achar no código onde errei, para que a mascara não fosse aplicada.

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 = CPF()
        return validador_cpf.validate(documento)

    def format(self):
        mascara_cpf = CPF()
        return mascara_cpf.mask(self.cpf)
4 respostas

Oi Fabrício, tudo bem?

Compartilhe todo o código com a gente, o cpf_cnpj.py e o main.py para que possamos te ajudar melhor.

Fico no aguardo

Cpf_Cnpj

from validate_docbr import CPF, CNPJ

class Documento:

    @staticmethod
    def cria_documento(documento):
        if len(documento) == 11:
            return DocCpf
        elif len(documento) == 14:
            return DocCnpj
        else:
            raise ValueError('Quantidade de digitos 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 = CPF()
        return validador_cpf.validate(documento)

    def format(self):
        mascara_cpf = CPF()
        return mascara_cpf.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):
        validador_cnpj = CNPJ()
        return validador_cnpj.validate(documento)

    def format(self):
        mascara_cnpj = CNPJ()
        return mascara_cnpj.mask(self.cnpj)

Main

from Cpf_Cnpj import Documento
exemplo_cpf = '07280965954'
doc = Documento.cria_documento(exemplo_cpf)
print(doc)
RETORNA:
<class 'Cpf_Cnpj.DocCpf'>
solução!

Fabrício, isto está ocorrendo porque na classe Documento, você está retornando a referência da classe DocCpf/DocCnpj e não uma instância dela. Neste trecho:

 if len(documento) == 11:
       return DocCpf
 elif len(documento) == 14:
       return DocCnpj

Para corrigir, basta retornar a instância da classe, passando como argumento o documento. Desta maneira:

 if len(documento) == 11:
       return DocCpf(documento)
 elif len(documento) == 14:
       return DocCnpj(documento)

Com isto, seu código funcionará normalmente.

Espero ter ajudado. Abraços e bons estudos!

Perfeito. Muito obrigado pela atenção e rapidez, Nádia

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software