Sobes.tech
Back to questions
Junior — Middle
75

Объясните разницу между статическими и классовыми методами в объектно-ориентированном программировании.

Answer from AI

sobes.tech AI

В Python статические методы и классовые методы — это методы, которые не привязаны к конкретному экземпляру класса, но имеют различия в том, как они работают с классом.

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

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

Пример:

class MyClass:
    @staticmethod
    def static_method(x, y):
        return x + y

    @classmethod
    def class_method(cls, value):
        return cls(value)

    def __init__(self, value):
        self.value = value

# Вызов статического метода
print(MyClass.static_method(5, 7))  # 12

# Вызов классового метода
obj = MyClass.class_method(10)
print(obj.value)  # 10

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