Como Usar o Método Estático no Python
Python’s Instance, Class, and Static Methods Demystified
Neste tutorial, vamos desmistificar os conceitos de métodos de instância, métodos de classe e métodos estáticos em Python. Com uma compreensão intuitiva das diferenças entre eles, você será capaz de escrever Python orientado a objetos que comunica sua intenção de forma mais clara e será mais fácil de manter a longo prazo.
Métodos de instância, métodos de classe e métodos estáticos - Uma visão geral
Vamos começar escrevendo uma classe em Python 3 que contém exemplos simples para os três tipos de métodos:
Métodos de instância
O primeiro método, chamado method
, é um método de instância regular. Esse é o tipo básico de método que você usará na maioria das vezes. Como podemos ver, esse método recebe um parâmetro chamado self
, que se refere a uma instância da classe MyClass
quando o método é chamado. Por meio desse parâmetro self
, os métodos de instância têm acesso livre a atributos e outros métodos do mesmo objeto. Isso proporciona um grande poder na modificação do estado do objeto. Além de modificar o estado do objeto, os métodos de instância também podem acessar a própria classe por meio do atributo self.__class__
, o que significa que eles também podem modificar o estado da classe.
Métodos de classe
Agora, vamos comparar o método MyClass.classmethod
. Este método é marcado com o decorador @classmethod
para indicar que é um método de classe. Em vez de aceitar o parâmetro self
, os métodos de classe recebem o parâmetro cls
, que se refere à classe e não à instância do objeto, quando o método é chamado. Como o método de classe só tem acesso a esse argumento cls
, ele não pode modificar o estado da instância do objeto. Isso exigiria acesso ao self
. No entanto, os métodos de classe ainda podem modificar o estado da classe, que se aplica a todas as instâncias da classe.
Métodos estáticos
O terceiro método, MyClass.staticmethod
, foi marcado com o decorador @staticmethod
. Os métodos estáticos são métodos que não recebem um parâmetro especial como self
ou cls
. Eles são apenas funções dentro da classe e não têm acesso a atributos da instância ou da classe. Portanto, eles não podem modificar o estado da instância do objeto nem o estado da classe. Os métodos estáticos são úteis quando você precisa definir uma função que está logicamente relacionada à classe, mas não precisa de acesso a seus atributos.
Agora que entendemos a diferença entre esses três tipos de métodos, vamos ver como eles funcionam na prática.
Vamos vê-los em ação!
Vamos criar uma instância da classe MyClass
e chamar seus métodos para ver os resultados:
Saída:
Como podemos ver, quando chamamos o método method()
, ele retorna uma string indicando que o método de instância foi chamado, junto com a referência ao objeto MyClass
. Quando chamamos o método classmethod()
, ele retorna uma string indicando que o método de classe foi chamado, junto com a referência à classe MyClass
. E, finalmente, quando chamamos o método staticmethod()
, ele retorna uma string indicando que o método estático foi chamado.
Pizzas deliciosas com @classmethod
Vamos criar uma classe Pizza
que usa um método de classe para criar diferentes tipos de pizzas:
Agora, podemos criar diferentes tipos de pizzas usando os métodos de classe:
Neste exemplo, os métodos de classe margherita()
e pepperoni()
retornam instâncias da própria classe Pizza
com ingredientes específicos. Isso nos permite criar diferentes tipos de pizzas de maneira mais fácil e legível.
Quando usar métodos estáticos
Os métodos estáticos são úteis quando você precisa definir uma função relacionada à classe, mas que não requer acesso a seus atributos. Vamos criar uma classe MathUtils
com um método estático para calcular a área de um círculo:
Agora, podemos chamar o método estático circle_area()
sem precisar criar uma instância da classe MathUtils
:
O método estático circle_area()
calcula a área de um círculo com base no raio fornecido, sem precisar de acesso a nenhum atributo da classe MathUtils
. Portanto, não é necessário criar uma instância da classe para chamar esse método.
Conclusão
Neste tutorial, nós exploramos os conceitos de métodos de instância, métodos de classe e métodos estáticos em Python. A compreensão desses conceitos é fundamental para escrever código orientado a objetos claro, legível e fácil de manter. Agora você tem as ferramentas necessárias para utilizar esses diferentes tipos de métodos adequadamente em seus projetos Python. Então, aproveite ao máximo e escreva um código Python limpo e eficiente!