Sobes.tech
Junior — Middle
70

Какие отличия в использовании и поведении у методов, объявленных с декораторами @staticmethod и @classmethod?

Companies where asked
Бергман Инфотех
ООО Ок Софт

Answer from AI

sobes.tech AI

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

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

Пример:

class MyClass:
    @staticmethod
    def static_method():
        print("Это статический метод")

    @classmethod
    def class_method(cls):
        print(f"Это метод класса, cls = {cls}")

MyClass.static_method()      # Выведет: Это статический метод
MyClass.class_method()       # Выведет: Это метод класса, cls = <class '__main__.MyClass'>