При интеграции приложения Django, которое я раньше не использовал, я обнаружил два разных способа определения функций в классах. Автор, кажется, намеренно использует их оба. Первым я сам часто пользуюсь:
class Dummy(object):
def some_function(self,*args,**kwargs):
do something here
self is the class instance
Другой - тот, которым я не пользуюсь, в основном потому, что не понимаю, когда его использовать и для чего:
class Dummy(object):
@classmethod
def some_function(cls,*args,**kwargs):
do something here
cls refers to what?
В документации Python classmethod
декоратор объясняется следующим предложением:
Метод класса получает класс как неявный первый аргумент, точно так же, как метод экземпляра получает экземпляр.
Так что, я полагаю, cls
относится к Dummy
себе (к class
, а не к экземпляру). Я не совсем понимаю, почему это существует, потому что я всегда мог это сделать:
type(self).do_something_with_the_class
Это просто для ясности, или я пропустил самую важную часть: жуткие и захватывающие вещи, которые невозможно было бы сделать без этого?