1
resposta

@staticmethod

Não ficou claro porque foi utilizado um método estático no código ao dividir as classes em três, por que foi utilizado um método estático? Alguém poderia explicar por gentileza?

1 resposta

Oii Lucas, como você está? Espero que esteja bem ^-^

O método estático foi utilizado para utilizarmos o método cria_documento sem necessariamente criarmos um objeto da classe Documento. Veja:

Documento.cria_documento("35379838000112")

Observe que no exemplo acima não precisamos instanciar um objeto da classe documento. Ou seja:

objeto = Documento()
objeto.cria_documento("35379838000112")

Através do método estático, apenas com o nome da classe já é possível chamarmos o método que precisamos e esse foi o objetivo de utilizarmos um método estático.

Além disso, esse método estático está atuando como fábrica, pois, ele nos retorna uma classe, então quando criarmos um documento, automaticamente teremos como retorno um objeto da classe CNPJ ou da classe CPF:

@staticmethod
def cria_documento(documento):
    if len(documento) == 11:
        return DocCpf(documento) # retorno da classe DocCpf
    elif len(documento) == 14:
        return DocCnpj(documento) # retorno da classe DocCnpj
    else:
        raise ValueError("Quantidade de dígitos incorreta!")

Qualquer dúvida estou por aqui, tá bom?

Grande abraço!