Когда следует использовать метод @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?

В документации по Python Декоратор classmethodобъясняется следующим предложением:

Метод класса получает класс как неявный первый аргумент, просто как метод экземпляра получает экземпляр.

Итак, я предполагаю, что clsотносится к самому Dummy(class, а не к экземпляру). Я не совсем понимаю, почему это существует, потому что я всегда мог сделать это:

type(self).do_something_with_the_class

Это просто для ясности, или я пропустил самое главное: жуткие и увлекательные вещи, которые не могли быть сделаны без этого?

71
задан P̲̳x͓L̳ 28 March 2014 в 17:21
поделиться