Обзор ООП в python [1] здесь: Объектно-ориентированное программирование в Python

Это декораторы, которые являются частью аспектов функционального программирования в Python. О них читайте здесь: Функциональное программирование на Python [3]: @Decorators

Экземпляр, класс и статические атрибуты

Свойства могут быть переменными или методами

статический метод, метод класса и метод экземпляра

Если у нас есть много методов или свойств внутри класса объекта, некоторые из них могут просто потребоваться для промежуточных вычислений и не должны храниться в каком-либо объекте-экземпляре. Это временные переменные, к которым обращаются во время любых вычислений. Таким образом, мы могли бы определить их как переменные класса или методы класса, а не как свойства экземпляра или методы.

Характеристики:

  1. self должен быть первым аргументом для метода instance, а cls должен быть первым аргументом для метода class и статический метод не должен иметь никаких аргументов.
  2. статические и классовые методы могут быть вызваны без инициализации
  3. Статические методы и методы класса не могут вызывать методы или переменные экземпляра, но могут вызывать другие статические методы и методы или переменные класса.
  4. Статический метод принадлежит классу и вообще не будет использовать объект.
  5. Метод класса привязан не к объекту, а к классу.

метод класса и статический метод

Сходство: оба они могут вызываться в самом классе, а не только в экземпляре класса. Таким образом, оба они в некотором смысле являются методами класса.

Разница: метод класса получит сам класс в качестве первого аргумента, а статический метод — нет. Таким образом, staticmethod — это независимая функция, которая определена внутри класса, но не может получить доступ к методам и переменным класса как таковым, но их нужно отправить в функцию.

class A(object):
    x = 0
def say_hi(self):
        '''
        Return a value that is a function of the instance with its
        attributes, and other arguments such as arg_1 and kwarg2
        '''
        pass
 
    @staticmethod
    def say_hi_static():
        '''
        Return a value that is a function of arg_0. It does not know    the 
        instance or class it is called from.
        '''
        pass
@classmethod
    def say_hi_class(cls):
        '''
        Return a value that is a function of the class and other arguments.
        respects subclassing, it is called with the class it is called from.
        '''
        pass
def run_self(self):
        self.x += 1
        print self.x # outputs 1
        self.say_hi()
        self.say_hi_static()
        self.say_hi_class()
@staticmethod
    def run_static():
        print A.x  # outputs 0
        # A.say_hi() #  wrong
        A.say_hi_static()
        A.say_hi_class()
@classmethod
    def run_class(cls):
        print cls.x # outputs 0
        # cls.say_hi() #  wrong
        cls.say_hi_static()
        cls.say_hi_class()ob

Источники:

  1. https://stackoverflow.com/questions/136097/в чем разница между статическим методом и классовым методом в питоне