Kiedy należy używać metody @classmethod i kiedy metoda def (self)?
Podczas integracji aplikacji Django, której wcześniej nie używałem, znalazłem dwa różne sposoby definiowania funkcji w klasach. Autor wydaje się używać ich bardzo celowo. Pierwszy to taki, którego sam dużo używam:
class Dummy(object):
def some_function(self,*args,**kwargs):
do something here
self is the class instance
Drugi to taki, którego nie używam, głównie dlatego, że nie rozumiem, kiedy go używać i po co:
class Dummy(object):
@classmethod
def some_function(cls,*args,**kwargs):
do something here
cls refers to what?
W Pythonie dokumentujeclassmethod
dekorator jest wyjaśniony tym zdaniem:
Metoda klasy otrzymuje klasę jako niejawny pierwszy argument, tak jak metoda instancji otrzymuje instancję.
Zgadujęcls
odnosi się doDummy
sam (class
, nie instancja). Nie do końca rozumiem, dlaczego to istnieje, ponieważ zawsze mogę to zrobić:
type(self).do_something_with_the_class
Czy to tylko dla jasności, czy też tęskniłem za najważniejszą częścią: strasznymi i fascynującymi rzeczami, których bez niego nie da się zrobić?