Wann sollte ich @classmethod und wann def method (self) verwenden?

Bei der Integration einer Django-App, die ich bisher noch nicht verwendet habe, habe ich zwei verschiedene Möglichkeiten gefunden, um Funktionen in Klassen zu definieren. Der Autor scheint sie beide sehr absichtlich zu benutzen. Der erste ist einer, den ich selbst oft benutze:

class Dummy(object):

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

Der andere ist einer, den ich nicht benutze, hauptsächlich, weil ich nicht verstehe, wann ich ihn verwenden soll und wofür:

class Dummy(object):

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

In den Python-Dokumenten derclassmethod Dekorateur wird mit diesem Satz erklärt:

Eine Klassenmethode empfängt die Klasse als implizites erstes Argument, genau wie eine Instanzmethode die Instanz empfängt.

Also denke ichcls bezieht sich aufDummy selbstclass, nicht die Instanz). Ich verstehe nicht genau, warum das existiert, weil ich das immer tun könnte:

type(self).do_something_with_the_class

Ist das nur der Übersichtlichkeit halber, oder habe ich den wichtigsten Teil übersehen: gruselige und faszinierende Dinge, die ohne sie nicht möglich wären?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage