При интеграции приложения 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
Это просто для ясности, или я пропустил самое главное: жуткие и увлекательные вещи, которые не могли быть сделаны без этого?