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

dúvida por que def __str__ e def format só recebem o self?

Olá, boa tarde! Estou fazendo a Formação de Python. Nos vídeos do curso Python Brasil: Validação de dados no padrão nacional temos sempre nas Classes: Def construtora init, uma def para validação do documento (cpf, cnpj ou telefone) e as def de formatação (máscara) e impressão (str)

Por que mesmo nas Def format e Def str a gente passa só o 'self' e não passa o outro(s) atributo(s) da classe? Já tinha visto em algum dos cursos anteriores mas não consegui localizar o vídeo que introduziu esse conceito. Agradeço quem puder ajudar (explicando ou localizando essa aula pra mim) :-)

Exemplo:

class DocCnpj: def init(self, documento): if self.valida_documento(documento): self.cnpj = documento else: raise ValueError('CNPJ inválido!!!')

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

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

def valida_documento(self, documento):
    validador = CNPJ()
    return validador.validate(documento)
4 respostas

através do 'self' se acessa todos os atributos da instância da classe, no caso da valida_documento o ideal é que fosse um método estatico já que ele sempre vai validar um documento de fora da instância da classe em questão assim removendo o self da assinatura da função.

Olá, obrigada, Rafael!

Vc quer dizer que a 'def valida_documento' poderia receber a property @staticmethod sem passar o 'self' como parâmetro (não precisaria instanciar na classe)? (se for isso entendi rsss) @staticmethod def valida_documento(documento): validador = CNPJ() return validador.validate(documento)

Não entendo por que NÃO preciso passar o atributo 'cnpj' no exemplo abaixo: def formata_documento(self): mascara = CNPJ() return mascara.mask(self.cnpj)

solução!

você não precisa passar pois o formata_documento usa o documento da instância da classe (self.cnpj) ou seja o documento não precisa ser passado pra função para ela saber qual cnpj ela tem que mascarar.

Top, agora 'foi' rsss (entendi). Valeu!!!