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 obu bardzo celowo. Pierwszy to ten, którego sam często 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 do czego:
class Dummy(object):
@classmethod
def some_function(cls,*args,**kwargs):
do something here
cls refers to what?
W dokumentacji Pythona classmethod
dekorator jest wyjaśniony następującym zdaniem:
Metoda klasy otrzymuje klasę jako niejawny pierwszy argument, tak jak metoda instancji otrzymuje instancję.
Więc myślę, że cls
odnosi się do Dummy
siebie (a class
nie do instancji). Nie do końca rozumiem, dlaczego tak jest, ponieważ zawsze mogłem to zrobić:
type(self).do_something_with_the_class
Czy to tylko dla jasności, czy też przegapiłem najważniejszą część: straszne i fascynujące rzeczy, których nie można by zrobić bez tego?