Найти в Дзене
Computer Pro

Что такое @staticmethod и @classmethod в Python

Разработчик программного обеспечения я еще ниже джуниора, поэтому частенько сталкиваюсь с определенными трудностями. И вот очередная - я или не знал, или уже успел забыть что такое @staticmethod и @classmethod в Python. Не важно. А чего вдруг мне эти штуки понадобились?! А вот почему - в 20 модуле, в домашней работе есть вот такая задача: Опишите classmethods для таблицы читателей:получить список студентов, которые имеют стипендию;
получить список студентов, у которых средний балл выше, чем тот балл, который будет передан входным параметром в функцию.
Таблица "читателей" она же таблица students Вот решил проработать эту тему для себя, ну может и еще кому нибудь будет интересно... @classmethod И вот какой у нас получится после всего этого вывод: Это конечно всё красиво, но для чего ж нужны эти staticmethods? Статический метод помогает в достижении инкапсуляции в классе, поскольку он не знает о состоянии текущего экземпляра. Кроме того, статические методы делают код более читабельным
Оглавление

Разработчик программного обеспечения я еще ниже джуниора, поэтому частенько сталкиваюсь с определенными трудностями. И вот очередная - я или не знал, или уже успел забыть что такое @staticmethod и @classmethod в Python. Не важно.

А чего вдруг мне эти штуки понадобились?! А вот почему - в 20 модуле, в домашней работе есть вот такая задача:

Опишите classmethods для таблицы читателей:получить список студентов, которые имеют стипендию;
получить список студентов, у которых средний балл выше, чем тот балл, который будет передан входным параметром в функцию.
Таблица "читателей" она же таблица students

Вот решил проработать эту тему для себя, ну может и еще кому нибудь будет интересно...

@classmethod

а согласитесь, текстовый редактор nvim, правильно настроенный для работы с Python - красиво смотрится?!
а согласитесь, текстовый редактор nvim, правильно настроенный для работы с Python - красиво смотрится?!

И вот какой у нас получится после всего этого вывод:

-3

Это конечно всё красиво, но для чего ж нужны эти staticmethods?

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

Инкапсуляция - есть какой-то подвох в этом слове, такой же как в слове толерантность. Дай, думаю, гляну толкование этого слова:

Ну я ж говорил, чем то с толерантностью схоже. Вот жеж разработчики, не могли слово поприличней выбрать...
Ну я ж говорил, чем то с толерантностью схоже. Вот жеж разработчики, не могли слово поприличней выбрать...

В следующем примере, мы можем проверить - является ли человек совершеннолетним или нет, без инициирования создания экземпляра класса:

-5
-6

@classmethod

Проще говоря, @classmethod – это обычный метод класса, имеющий доступ ко всем атрибутам класса, через который он был вызван.

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

-7
-8

Что-то типа вывода

Методы класса и статические методы в Python — это мощные инструменты, которые позволяют управлять поведением классов и их экземпляров. Они помогают создавать более гибкий и модульный код, а также упрощают процесс наследования и переопределения методов.

И как это будет выглядеть на практике в задаче (описание, см. выше).

-9

Вызвал я эти два классметода с помощью получения списка студентов, включив дополнительный код с этими методами:

-10

Ну вот такое получилось объяснение и его решение непосредственно в задаче.

Ну а на этом у меня всё. Вы знаете что сделать после прочтения статьи - лайк, подписку, комментарий. Это помогает продвигаться каналу и публикациям в рекомендательной системе Дзена.

Да пребудет с вами СИЛА!