Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Nomes iguais nos métodos

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

1 resposta
solução!

Olá Tammy, não é obrigatório ter o mesmo nome nas duas subclasses, a única coisa que muda é que você vai precisar fazer as chamadas pelos nomes que você criou em cada uma delas, então sempre procure simplificar para o uso do código ficar bem intuitivo. :)