9.3 Métodos De Classe

Métodos estáticos não devem ser confundidos com métodos de classe. Como os métodos estáticos, métodos de classe não são ligados às instâncias, mas sim a classe. O primeiro parâmetro de um método de classe é uma referência para a classe, isto é, um objeto do tipo class, que por convenção nomeamos como ‘cls’. Eles podem ser chamados via instância ou pela classe e utilizam um outro decorador, o

@classmethod:‌

class Conta:

_total_contas = 0 def init(self):

type(self)._total_contas +=

@classmethod

def get_total_contas(cls): return cls._total_contas
 
E podemos testar:
 
c1 = Conta(100.0) c1.get_total_contas() #1
 
c2 = Conta(200.0) c2.get_total_contas() #2
 
Conta.get_total_contas() #2
 
No início pode parecer confuso qual usar: @staticmethod ou @classmethod ? Isso não é trivial. Métodos de classe servem para definir um método que opera na classe, e não em instâncias. Já os métodos estáticos utilizamos quando não precisamos receber a referência de um objeto especial (seja da classe ou de uma instância) e funciona como uma função comum, sem relação.
 

Isso ficará mais claro quando avançarmos no aprendizado. No próximo capítulo discutiremos Herança, um conceito fundamental em Orientação a Objetos. Veremos que classes podem ter filhas e aproveitar o código das classes mães. Um método de classe pode mudar a implementação, ou seja, pode ser reescrito pela classe filha. Já os métodos estáticos não podem ser reescritos pelas filhas, já que são imutáveis e não dependem de um referência especial.

@CLASSMETHOD X @STATICMETHOD

Alguns programadores não veem muito sentido em usar métodos estáticos, já que se você escrever uma função que não vai interagir com a classe, basta defini-la no módulo. Outros já contra argumentam em outra via, considerando herança de classes que veremos em outro capítulo. Indicamos a leitura do artigo ‘The Definitive Guide on How to Use Static, Class and Abstract Methods in Python’ de Julien Danjou que pode ser acessado pelo link: https://julien.danjou.info/guide-python-static-class-abstract-methods/ .


⬅️ Capítulo Anterior | Próximo Capítulo ➡️