1
resposta

TypeError: DocCnpj() takes no arguments

Bom dia !, estou tentando testar a execução conforme a aula, mais estou com o erro no DocCnpj, tentei identificar o que estou fazendo de errado e não consegui visualizar o erro, segue a versão que estou tentando executar:

from validate_docbr import 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 digitos está invalida !!!")

class DocCpf:

    def __int__(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 __int__(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()
        return validador.validate(documento)

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

Obrigado !

1 resposta

Olá Miguel, tudo bem com você?

O erro TypeError: DocCnpj() takes no arguments, surge quando no momento da instanciação (criação) de um objeto de classe passamos um argumento mas a classe não requer um argumento.

Os métodos inicializadores das classes DocCpf e DocCnpj foram declarados usando a seguinte nomenclatura: __int__ (sem um i) no lugar de __init__ (com dois I), por isso eles não estão sendo reconhecidos como método inicializador que será responsável por definir quais argumentos a classe recebe no momento da criação de um objeto.

Peço que realize as mudanças nos dois métodos inicializadores, mudando para __init__, como apresentado abaixo:

class DocCpf:

    def __init__(self, documento):
        if self.valida(documento):
            self.cpf = documento
        else:
            raise ValueError("CPF Inválido !!")
class DocCnpj:

    def __init__(self, documento):
        if self.valida(documento):
            self.cnpj = documento
        else:
            raise ValueError("CNPJ Inválido !!")

Após realizar as mudanças, salve o arquivo e execute o arquivo que contém os dados da criação dos objetos, na aula foi utilizado o arquivo main.py.

Fico à disposição em caso de dúvidas.

Abraços e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

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