1
resposta

TypeError: 'str' object is not callable

TypeError: 'str' object is not callable

CPF roda sem erros, mas quando rodo o main aparece isso. Não estou conseguindo identificar o erro, alguém sabe?

class cpf:
    def __init__(self, documento):
        documento = str(documento)
        if self.cpf_eh_Valido(documento):
            self.cpf = documento
        else:
            raise ValueError("CPF inválido!")

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

    def cpf_eh_Valido(self, documento):
        if len(documento) == 11:
            return True
        else:
            return False

    def format_cpf(self):
        fatia_um = self.cpf[:3]
        fatia_dois = self.cpf[3:6]
        fatia_tres = self.cpf[6:9]
        fatia_quatro = self.cpf[9:]
        return(
            "{}.{}.{}-{}".format(
                fatia_um,
                fatia_dois,
                fatia_tres,
                fatia_quatro
            )
        )
from cpf import cpf

cpf= "15398745687"
objeto_cpf = cpf(cpf)

print(objeto_cpf)
1 resposta

Olá, bom dia! Está acontecendo um conflito de nomes entre o nome da classe cpf e a variável cpf, como a variável cpf= "15398745687" é declarada depois do from cpf import cpf, ela acaba sobrescrevendo o import. O seu código da main está sendo interpretado desse jeito:

objeto_cpf = "15398745687"("15398745687")

Por isso está dando o TypeError: 'str' object is not callable, porque a string com o número do cpf está sendo chamada como se fosse uma função. O ideal é renomear a variável cpf para um nome mais legível, como numero_cpf. Outro ponto importante é que por convenção os nomes de classes são escritos em PascalCase, com todas as palavras juntas e com a primeira letra em maiúscula, justamente para evitar esse tipo de problema.

class Cpf:
    '''resto do codigo'''
from cpf import Cpf

numero_cpf = "15398745687"
objeto_cpf = Cpf(numero_cpf)

print(objeto_cpf)

Espero ter ajudado!