Когда я должен использовать @classmethod и когда метод def (self)?
При интеграции приложения 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?
В документации по Pythonclassmethod
декоратор объясняется этим предложением:
A class method receives the class as implicit first argument, just like an instance method receives the instance.
Так что я думаюcls
относится кDummy
сам (class
, а не экземпляр). Я не совсем понимаю, почему это существует, потому что я всегда мог сделать это:
type(self).do_something_with_the_class
Это только для ясности, или я упустил самую важную часть: жуткие и захватывающие вещи, которые нельзя было бы сделать без этого?