Чем отличаются декораторы classmethod и staticmethod ?

Спросят с вероятностью 10%



classmethod и staticmethod - это специальные декораторы, которые позволяют определять методы в классах с особым поведением. Однако они имеют различия в том, как они обрабатывают аргументы и как они взаимодействуют с экземплярами класса.



1️⃣ classmethod:



- Декоратор преобразует обычный метод класса в тот, который принимает первым аргументом ссылку на класс (обычно называемый cls).

- Это означает, что метод classmethod может обращаться к атрибутам и вызывать другие методы класса через ссылку на сам класс, а не через экземпляр класса.

- Может использоваться, например, для создания альтернативных конструкторов класса или для работы с классовыми переменными.

Пример classmethod:

class MyClass:

class_attribute = 123



@classmethod

def class_method(cls):

return cls.class_attribute



print(MyClass.class_method()) # Выведет: 123




2️⃣ staticmethod:

- Декоратор создает метод класса, который не принимает ссылку на сам класс (неявно или явно), и не принимает ссылку на экземпляр класса (обычно называемый self).

- Это означает, что staticmethod является статическим методом и может быть вызван как из класса, так и из экземпляра класса, но не имеет доступа к атрибутам и методам класса или экземпляра.

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



Пример staticmethod:

class MyClass:

@staticmethod

def static_method():

return "This is a static method"



print(MyClass.static_method()) # Выведет: This is a static method




Основное отличие между classmethod и staticmethod заключается в том, что classmethod принимает ссылку на класс, а staticmethod - нет.



➡️ Примеры ответов

➡️ Список всех вопросов на Python Developer



🧩 Идущий | 🔐 Собесы | 🔐 Тестовые