Quand dois-je utiliser @classmethod et quand def méthode(auto)?

Tout en intégrant un Django app je n'ai pas utilisé avant, j'ai trouvé deux façons différentes utilisées pour définir les fonctions dans les classes. L'auteur semble utiliser à la fois très intentionnellement. Le premier est celui que j'utilise moi-même beaucoup:

class Dummy(object):

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

L'autre est un je n'ai pas l'utilisation, principalement parce que je ne comprends pas quand l'utiliser, et ce pour:

class Dummy(object):

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

Dans le Python docs le classmethod décorateur est expliqué avec cette phrase:

Une méthode de la classe reçoit la classe implicite premier argument, juste
comme une méthode d'instance reçoit l'instance.

Donc je suppose que cls se réfère à Dummy lui-même (le class, pas l'instance). Je n'ai pas de comprendre exactement pourquoi cela existe, car j'ai toujours pu le faire:

type(self).do_something_with_the_class

Est-ce juste par souci de clarté, ou ai-je raté la partie la plus importante: effrayant et fascinant des choses qui n'a pas pu être fait sans elle?

InformationsquelleAutor marue | 2012-05-14