¿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?

Respuestas a la pregunta(2)

Su respuesta a la pregunta