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?