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

Этот вопрос проверяет знание различий между двумя декораторами в Python: classmethod и staticmethod, а также их назначение и поведение.

Короткий ответ

- classmethod получает в качестве первого аргумента сам класс (по умолчанию cls), а не экземпляр. Он используется для методов, которые работают с классом, а не с объектами.

- staticmethod не получает ни класс, ни экземпляр в качестве первого аргумента и работает как обычная функция, которая логически связана с классом.

Длинный ответ

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

 

Пример с classmethod:

class MyClass:
    count = 0

    def __init__(self):
        MyClass.count += 1

    @classmethod
    def get_count(cls):
        return cls.count

obj1 = MyClass()
obj2 = MyClass()
print(MyClass.get_count())  # Выведет 2

- staticmethod: Декоратор staticmethod используется, когда метод не зависит ни от класса, ни от экземпляра. Это обычная функция, которая логически привязана к классу, но не использует его атрибуты и методы. Такой метод не принимает ни self, ни cls в качестве первого аргумента.

 

Пример с staticmethod:

class MyClass:
    @staticmethod
    def greet(name):
        return f"Hello, {name}"

print(MyClass.greet("Alice"))  # Выведет "Hello, Alice"

 

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

 

Уровень

  • Рейтинг:

    5

  • Сложность:

    1

Навыки

  • Python

Ключевые слова

Подпишись на Python Developer в телеграм