Quando devo usar @classmethod e quando def method (self)?
Ao integrar um aplicativo Django que não usei antes, encontrei duas maneiras diferentes usadas para definir funções em classes. O autor parece usá-los de maneira muito intencional. O primeiro é um que eu mesmo uso muito:
class Dummy(object):
def some_function(self,*args,**kwargs):
do something here
self is the class instance
O outro é um que eu não uso, principalmente porque não entendo quando usá-lo e para quê:
class Dummy(object):
@classmethod
def some_function(cls,*args,**kwargs):
do something here
cls refers to what?
Nos documentos do Python, oclassmethod
decorador é explicado com esta frase:
Um método de classe recebe a classe como primeiro argumento implícito, assim como um método de instância recebe a instância.
Então eu achocls
refere-se aDummy
em si (oclass
, não a instância). Eu não entendo exatamente porque isso existe, porque eu sempre posso fazer isso:
type(self).do_something_with_the_class
Isso é apenas por uma questão de clareza, ou eu perdi a parte mais importante: coisas assustadoras e fascinantes que não poderiam ser feitas sem ela?