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?
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?
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.