Sobes.tech
Back to questions
Junior — Middle
79

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

Companies where asked
РостелекомРостелеком

Answer from AI

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 — метод, работающий с самим классом.