Чем отличаются декораторы classmethod и staticmethod ?
Спросят с вероятностью 10%
classmethod и staticmethod - это специальные декораторы, которые позволяют определять методы в классах с особым поведением. Однако они имеют различия в том, как они обрабатывают аргументы и как они взаимодействуют с экземплярами класса.
1️⃣ classmethod:
- Декоратор преобразует обычный метод класса в тот, который принимает первым аргументом ссылку на класс (обычно называемый
- Это означает, что метод
- Может использоваться, например, для создания альтернативных конструкторов класса или для работы с классовыми переменными.
Пример
2️⃣ staticmethod:
- Декоратор создает метод класса, который не принимает ссылку на сам класс (неявно или явно), и не принимает ссылку на экземпляр класса (обычно называемый
- Это означает, что
- Статические методы могут быть полезны для группировки связанных функций внутри класса или для создания методов, которые не требуют доступа к состоянию класса или экземпляра.
Пример
Основное отличие между
➡️ Примеры ответов
➡️ Список всех вопросов на Python Developer
🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Спросят с вероятностью 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