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?

questionAnswers(2)

yourAnswerToTheQuestion