Bei der Integration einer Django-App, die ich zuvor noch nicht verwendet habe, habe ich zwei verschiedene Möglichkeiten gefunden, um Funktionen in Klassen zu definieren. Der Autor scheint beide sehr absichtlich zu verwenden. 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 wird der classmethod
Dekorateur mit folgendem Satz erklärt:
Eine Klassenmethode empfängt die Klasse als implizites erstes Argument, genau wie eine Instanzmethode die Instanz empfängt.
Ich cls
beziehe mich also auf sich Dummy
selbst (die class
, nicht die Instanz). Ich verstehe nicht genau, warum das so ist, weil ich das immer tun konnte:
type(self).do_something_with_the_class
Ist das nur der Klarheit halber oder habe ich den wichtigsten Teil verpasst: gruselige und faszinierende Dinge, die ohne sie nicht möglich wären?