1
resposta

Uso de Staticmethod

Foi mostrado no texto uma forma de definir um staticmethod sem necessariamente criar uma função para isso. Pra contextualizar, ele usou a classe Círculo e dentro dela, definiu uma variável PI da classe, assim poderia acessar fazendo Circulo.PI, mas foi mostrado um exemplo utilizando o decorador staticmethod. Qual a necessidade/vantagem de se usar com decorador? Em qual curso posso aprender mais sobre decoradores?( Criar os meus próprios, etc...)

1 resposta

Olá Gabriel! Tudo certo? Espero que sim. 🙂

Desculpe pelo atraso no retorno.

No caso específico do exemplo do professor, o único propósito da função criada através do decorador @staticmethod era retornar o valor de uma váriavel. Para tal objetivo, definir uma váriavel de classe se mostra um caminho mais eficaz, pois não não é necessário a criação de uma função.

No entanto, existem outras situações em que o uso de um @staticmethod é justificável. A seguir, eu mostro um exemplo.

Vamos analisar o caso de estarmos manipulando um objeto que guarda dados de uma conta bancária e queremos saber a qual banco um determinado código pertence, não importando qual objeto estamos acessando. Ou seja, todos aqueles objetos instânciados a partir dessa classe devem ter a capacidade de responder essa questão.

class Conta:
    def __init__(self, agencia, conta):
        self.__agencia = agencia
        self.__conta = conta

    @property
    def agencia(self):
        return self.__agencia

    @property
    def conta(self):
        return self.__conta

    @agencia.setter
    def agencia(self, nova_agencia):
        self.__agencia = nova_agencia

    @conta.setter
    def conta(self, nova_conta):
        self.__conta = nova_conta

    @staticmethod
    def nome_banco(codigo):
        if codigo == '260':
            print("Nubank")
        elif codigo == '001':
            print("Banco do Brasil")
        elif codigo == '237':
            print("Banco Bradesco")
        else:
            print("Banco não Encontrado.")


Conta.nome_banco('001')

Já a respeito de decoradores...

Decoradores são funcões que aceitam outras funções e acrescentam informações a essas mesmas. O Python possui decoradores internos como: @staticmethod, @classmethod e @property.

  • @staticmethod: Define uma função que é chamada de dentro de um objeto e independe dos valores internos do mesmo.

  • @classmethod: Define uma função que se refere aos atributos da classe e não dos objetos que está instânciando.

  • @property>: Forma específica da linguagem Python de definir getters e setters (existe ainda a opção de um deleter).

Espero ter ajudado! Quaisquer dúvidas ou questinoamentos, estou à disposição. 😉

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