Kiedy należy używać metody @classmethod i kiedy metoda def (self)?

Podczas integracji aplikacji Django, której wcześniej nie używałem, znalazłem dwa różne sposoby definiowania funkcji w klasach. Autor wydaje się używać ich bardzo celowo. Pierwszy to taki, którego sam dużo używam:

class Dummy(object):

    def some_function(self,*args,**kwargs):
        do something here
        self is the class instance

Drugi to taki, którego nie używam, głównie dlatego, że nie rozumiem, kiedy go używać i po co:

class Dummy(object):

    @classmethod
    def some_function(cls,*args,**kwargs):
        do something here
        cls refers to what?

W Pythonie dokumentujeclassmethod dekorator jest wyjaśniony tym zdaniem:

Metoda klasy otrzymuje klasę jako niejawny pierwszy argument, tak jak metoda instancji otrzymuje instancję.

Zgadujęcls odnosi się doDummy sam (class, nie instancja). Nie do końca rozumiem, dlaczego to istnieje, ponieważ zawsze mogę to zrobić:

type(self).do_something_with_the_class

Czy to tylko dla jasności, czy też tęskniłem za najważniejszą częścią: strasznymi i fascynującymi rzeczami, których bez niego nie da się zrobić?

questionAnswers(2)

yourAnswerToTheQuestion