Realmente é a resposta que mais faz sentido, mas acabei ficando confuso com a explicação, porque os métodos das classes filhas precisam ser iguais?
Durante esta aula construímos uma factory que decidia entre instanciar uma classe responsável por CPFs e outra por CNPJs. Uma das vantagens de usar esse padrão de projeto é facilitar o crescimento do código.
Avalie as afirmativas abaixo sobre as alterações necessárias, no caso de inserirmos um documento novo, e indique qual é a verdadeira.
A nova classe precisará ter todos os métodos com os mesmos nomes das outras classes filhas.
Explicação:
Correto! Para conseguirmos usar qualquer instância retornada pelo Factory livremente, os métodos das classes filhas precisam ser iguais.
Código:
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 inválida!')
class DocCpf:
def __init__(self, documento):
if self.valida_cpf(documento):
self.cpf = str(documento.lower())
else:
raise ValueError('CPF inválido!!')
def valida_cpf(self, documento):
validador = CPF()
return validador.validate(documento)
def __str__(self):
return self.formata_cpf()
def formata_cpf(self):
cpf_formatado = CPF()
return cpf_formatado.mask(self.cpf)
class DocCnpj:
def __init__(self, documento):
if self.valida_cnpj(documento):
self.cnpj = documento
else:
raise ValueError('CNPJ inválido!!')
def valida_cnpj(self, documento):
validador = CNPJ()
return validador.validate(documento)
def __str__(self):
return self.formata_cnpj()
def formata_cnpj(self):
cnpj_formatado = CNPJ()
return cnpj_formatado.mask(self.cnpj)