1
resposta

Métodos Estáticos e Atributos Estáticos

No exemplo de métodos estáticos é mostrado como uma função para pegar o codigo_banco. Quais da implicações se o codigo_banco fosse um atributo estático e não um método? Como escolher entre ambos?

1 resposta

Olá Isabela, tudo bem com você?

No exemplo apresentado na aula, foi escolhido o uso do método estático, o que possibilita a apresentação do decorator @staticmethod, dando prosseguimento na didática da aula.

Considerando a classe Conta apresentada na aula, tanto utilizando o método estático ou o atributo estático podemos obter o mesmo resultado; será informado para o usuário os códigos dos bancos.

    codigos = {'BB': '001', 'Caixa': '104', 'Bradesco': '237'}

    @staticmethod
    def codigos_bancos():
        return {'BB': '001', 'Caixa': '104', 'Bradesco': '237'}

Terminal

from conta import Conta

Conta.codigos
Conta.codigos_bancos()

Resultado

{'BB': '001', 'Caixa': '104', 'Bradesco': '237'}

{'BB': '001', 'Caixa': '104', 'Bradesco': '237'}

Como apresentado acima, o resultado é o mesmo, mas existe uma diferença entre os dois modelos que podemos destacar, quando temos um atributo estático, ele pode ser modificado fora da classe através de uma nova atribuição, como demonstrado abaixo.

Terminal

from conta import Conta

Conta.codigos
Conta.codigos = 10
Conta.codigos

Resultado

{'BB': '001', 'Caixa': '104', 'Bradesco': '237'}

10

Note que após a atribuição do valor 10, nossa variável estática passou a valer 10. Agora, façamos o mesmo com o método estático.

Terminal

from conta import Conta

Conta.codigos_bancos()
Conta.codigos_bancos() = 10

Resultado

{'BB': '001', 'Caixa': '104', 'Bradesco': '237'}

SyntaxError: cannot assign to function call here. Maybe you meant '==' instead of '='?

Note que no momento da tentativa de atribuição de um novo valor para um método estático recebemos um erro de sintaxe.

Em resumo, como apresentado, um dos pontos que podemos levar em consideração quanto a escolha entre método estático ou atributo estático é a possibilidade ou não possibilidade de novas atribuições de valores.

Com o uso do método estático temos uma garantia maior de integridade dos valores, mantendo-se os mesmos e caso seja feito a tentativa de atribuição será levantado um erro de sintaxe. Essa escolha irá depender da aplicação de cada classe.

Para saber um pouco mais sobre boas práticas de criação de classes em Python, recomendo a leitura do seguinte artigo:

O artigo está em inglês, caso tenha dificuldade com o idioma recomendo o uso do tradutor do navegador.

Fico à disposição em caso de dúvidas.

Abraços e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!