Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Possível erro no código da transcrição

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()

1 resposta
solução!

Oii Caio, como você está? Espero que esteja bem ^-^

Obrigada por nos alertar, você está correto, o código possuía alguns equívocos. Além dos relatados por você, o import também estava incorreto.

Quanto ao erro da classe CPF, ele estava ocorrendo porque era necessário passar a variável cpf_um como string e não como um inteiro e para dizer que a variável é do tipo str, precisamos envolvê-la entre as aspas, como mostro abaixo:

# Incorreto
cpf_um = 15316264754 # inteiro
documento = Documento.cria_documento(cpf_um)
print(documento)
# Correto
cpf_um = "15316264754" # str
documento = Documento.cria_documento(cpf_um)
print(documento)

Nossa equipe já realizou as correções. Mais uma vez, muito obrigada por relatá-las.

Grande abraço!