Olá, criei subclasses com métodos com nomes diferentes, e o código continuou funcionando:
from validate_docbr import *
class Documento:
@staticmethod
def cria_documento(documento):
if len(documento) == 11:
return Cpf(documento)
elif len(documento) == 14:
return Cnpj(documento)
else:
raise ValueError("A quantidade de dígitos está incorreta!")
class Cpf:
def __init__(self, documento):
documento = str(documento)
if self.cpf_valido(documento):
self._cpf = documento
else:
raise ValueError("CPF inválido")
def cpf_valido(self, cpf):
validador = CPF()
# validate() e CPF() vem da biblioteca validade_docbr
return validador.validate(cpf)
def format_cpf(self):
return f"{self._cpf[:3]}.{self._cpf[3:6]}.{self._cpf[6:9]}-{self._cpf[9:]}"
def __str__(self):
return self.format_cpf()
class Cnpj:
def __init__(self, documento):
documento = str(documento)
if self.cnpj_valido(documento):
self._cnpj = documento
else:
raise ValueError("CNPJ inválido")
def cnpj_valido(self, cnpj):
validador = CNPJ()
return validador.validate(cnpj)
def format_cnpj(self):
return f"{self._cnpj[:2]}.{self._cnpj[2:5]}.{self._cnpj[5:8]}/{self._cnpj[8:12]}-{self._cnpj[12:]}"
def __str__(self):
return self.format_cnpj()
Chamando a classe:
print(Documento.cria_documento("35379838000112"))
print(Documento.cria_documento("84478208077"))
o retorno é como esperado.
Fiquei na dúvida se os métodos realmente precisam ter o mesmo nome nas duas subclasses.
Obrigada