¿Cuándo debo usar @classmethod y cuando def method (self)?
Al integrar una aplicación Django que no he usado antes, encontré dos formas diferentes que se usan para definir funciones en las clases. El autor parece usarlos ambos intencionalmente. El primero es uno que yo mismo uso mucho:
class Dummy(object):
def some_function(self,*args,**kwargs):
do something here
self is the class instance
El otro es uno que no uso, principalmente porque no entiendo cuándo usarlo y para qué.
class Dummy(object):
@classmethod
def some_function(cls,*args,**kwargs):
do something here
cls refers to what?
En los documentos de Pythonclassmethod
El decorador se explica con esta frase:
Un método de clase recibe la clase como primer argumento implícito, al igual que un método de instancia recibe la instancia.
Así que supongocls
se refiere aDummy
en sí (elclass
, no la instancia). No entiendo exactamente por qué esto existe, porque siempre podría hacer esto:
type(self).do_something_with_the_class
¿Es esto solo por razones de claridad, o me perdí la parte más importante: cosas espeluznantes y fascinantes que no se podrían hacer sin ella?