Lors de l'intégration d'une application Django que je n'avais jamais utilisée auparavant, j'ai trouvé deux façons différentes de définir des fonctions dans les classes. L'auteur semble les utiliser tous les deux très intentionnellement. Le premier est celui que j'utilise beaucoup moi-même:
class Dummy(object):
def some_function(self,*args,**kwargs):
do something here
self is the class instance
L'autre est celui que je n'utilise pas, principalement parce que je ne comprends pas quand l'utiliser, et dans quel but:
class Dummy(object):
@classmethod
def some_function(cls,*args,**kwargs):
do something here
cls refers to what?
Dans la documentation Python, le classmethod
décorateur est expliqué avec cette phrase:
Une méthode de classe reçoit la classe comme premier argument implicite, tout comme une méthode d'instance reçoit l'instance.
Donc je suppose qu'il se cls
réfère à Dummy
lui-même (le class
, pas l'instance). Je ne comprends pas exactement pourquoi cela existe, car je pourrais toujours le faire:
type(self).do_something_with_the_class
Est-ce juste pour des raisons de clarté, ou ai-je manqué la partie la plus importante: des choses fantasmagoriques et fascinantes qui ne pourraient être faites sans cela?