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