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

Não estou conseguindo fazer a exibição no terminal.

from validate_docbr import CPF

class CPf(object): def valida_cpf(self, documento): validador = CPF() return validador.validate(documento)

def cpf_format(self, documento):
    mascara = CPF()
    return mascara.mask(documento)
#def __str__(self):
 #   return self.cpf_format()

class Cadastrador(object): def init(self, nome, data_de_nascimento, Cpf, Peso, categoria): self.nome = nome self.data_de_nascimento = data_de_nascimento self.Cpf = Cpf validador = CPf() if validador.valida_cpf(self.Cpf): self.Cpf = validador.cpf_format(self.Cpf) self.Peso = Peso self.categoria = categoria

def get(self):

    print("Nome: {}").format(self.nome)
    print("Data de nascimento: {}").format(self.data_de_nascimento)
    print("CPF: {}").format(self.Cpf)
    print("Peso: {}").format(self.Peso)
    print("Categoria: {}").format(self.categoria)

if name== "main":

cadastrador = Cadastrador("Thiago","16052002","91211951022","78","Sub21")
print(cadastrador.get())
4 respostas

Oii Thiago, tudo bem com você?

Seu código possui alguns pequenos errinhos de sintaxe:

  • O correto é __init__ com duplo underscore em ambos os lados na classe Cadastrador. No seu código possui apenas um undercore em ambos os lados.
  • O format possui a seguinte sintaxe: string.format(value1, value2...), então não devemos fechar o parênteses após escrever a string, devemos encadear a string com .format. Veja:

No seu código:

print("Nome: {}").format(self.nome)

O correto é:

print("Nome: {}".format(self.nome))
  • Por fim, como o método get já faz o print dentro dele, não é necessário chamar na main a função print para esse método, basta apenas invocá-lo:
cadastrador.get()

Código modificado:

from validate_docbr import CPF

class CPf(object):
    def valida_cpf(self, documento):
        validador = CPF()
        return validador.validate(documento)

    def cpf_format(self, documento):
        mascara = CPF()
        return mascara.mask(documento)
    #def __str__(self):
     #   return self.cpf_format()

class Cadastrador(object):
    def __init__(self, nome, data_de_nascimento, Cpf, Peso, categoria):
        self.nome = nome
        self.data_de_nascimento = data_de_nascimento
        self.Cpf = Cpf
        validador = CPf()
        if validador.valida_cpf(self.Cpf):
            self.Cpf = validador.cpf_format(self.Cpf)
        self.Peso = Peso
        self.categoria = categoria

    def get(self):

        print("Nome: {}".format(self.nome))
        print("Data de nascimento: {}".format(self.data_de_nascimento))
        print("CPF: {}".format(self.Cpf))
        print("Peso: {}".format(self.Peso))
        print("Categoria: {}".format(self.categoria))

if __name__== "__main__":

    cadastrador = Cadastrador("Thiago","16052002","91211951022","78","Sub21")
    cadastrador.get()

Thiago, qualquer dúvida, não hesite em perguntar. Estou a disposição. Abraços e bons estudos!

Obrigado por sua dica, mas estou tendo outro tipo de erro: "Cadastrador() takes no arguments"

def cpf_format(self, documento):
    mascara = CPF()
    return mascara.mask(documento)

def str(self): return self.cpf_format()

Uma outra dúvida que tenho é sobre essas funções, não consigo usá-las na classe Cadastrador. Se puder me ajudar eu agradeço.

solução!

Thiago, sobre:

"Cadastrador() takes no arguments"

É devido ao seu método init na classe Cadastrador possuir apenas um único underscore em ambos os lados, é necessário que o mesmo tenha duplo undercore em ambos os lados. Dessa forma:

def __init__(self, nome, data_de_nascimento, Cpf, Peso, categoria):

O método __str__ serve para mostrar a representação do objeto. Então se tivermos um objeto que instancia a classe Cpf, quando dermos um print desse objeto, deverá mostrar a sua representação que foi colocada no método __str__ . Por exemplo:

class CPf(object):
    def __init__(self, documento):
        self.documento = documento

    def valida_cpf(self):
        validador = CPF()
        return validador.validate(self.documento)

    def cpf_format(self):
        mascara = CPF()
        return mascara.mask(self.documento)

    def __str__(self):
       return 'Chamando representação do objeto da classe CPF: {}'.format(self.cpf_format())


 objeto_cpf = CPf("91211951022")
 objeto_cpf.valida_cpf()
 objeto_cpf.cpf_format()
 print(objeto_cpf)

Observe que tivemos que fazer algumas adaptações na classe Cpf, fazendo com que o usuário passe o seu documento ao instanciar a classe. Com isso, no método init da classe Cadastrador também sofrerá alterações onde estamos nos referindo ao Cpf:

 validador = CPf(self.Cpf)
        if validador.valida_cpf():
            self.Cpf = validador.cpf_format()

Você não conseguirá chamar o método __str__ da classe Cpf diretamente na classe Cadastrador, isso porque não estamos utilizando herança. Porém, como visto, esse método serve para representar o objeto da classe Cpf.

Qualquer dúvida é só falar =)