Sobes.tech
Junior — Middle
95

Чем отличается использование методов, объявленных как static и class, в Python?

Компании, где спрашивали
РостелекомРостелеком

Ответ от нейросети

sobes.tech AI

В Python методы, объявленные как @staticmethod и @classmethod, отличаются способом доступа к данным класса и экземпляра:

  • @staticmethod — это метод, который не принимает автоматически ни ссылку на экземпляр (self), ни на класс (cls). Он ведет себя как обычная функция, но находится внутри класса для логической группировки. Не может изменять состояние класса или экземпляра.

  • @classmethod — метод, который получает первым аргументом сам класс (cls), а не экземпляр. Позволяет работать с атрибутами класса, создавать альтернативные конструкторы и изменять состояние класса.

Пример:

class MyClass:
    count = 0

    @staticmethod
    def greet():
        print("Привет!")

    @classmethod
    def increment_count(cls):
        cls.count += 1

MyClass.greet()          # Выведет: Привет!
MyClass.increment_count()
print(MyClass.count)     # Выведет: 1

Таким образом, staticmethod — просто функция внутри класса, а classmethod — метод, работающий с самим классом.