Магия Python: @classmethod, @staticmethod и @property на практике

Магия Python: @classmethod, @staticmethod и @property на практике

Декораторы классов — мощный инструмент для создания элегантного ООП-кода в Python. Но чтобы использовать их эффективно, нужно понимать разницу между @classmethod, @staticmethod и @property. Разберём каждый на реалистичных примерах с сравнением подходов.

@property: Контролируемый доступ к атрибутам

Проблема без декоратора:
Без @property для валидации данных приходится использовать методы-сеттеры, что ломает естественность работы с атрибутами.

class UserWithoutProperty:
    def __init__(self, name):
        self.name = name
        self._age = 0

    def get_age(self):
        return self._age

    def set_age(self, value):
        if not (0 < value < 120):
            raise ValueError("Invalid age")
        self._age = value

# Неудобное использование:
user = UserWithoutProperty("Alice")
user.set_age(25)  # Вызов метода вместо присваивания
print(user.get_age())  # Не как обычное свойство

Решение с @property:
Декоратор превращает методы в атрибуты с логикой:

class User:
    def __init__(self, name):
        self.name = name
        self._age = 0

    @property
    def age(self):
        return f"Возраст: {self._age} лет"

    @age.setter
    def age(self, value):
        if not (0 < value < 120):
            raise ValueError("Недопустимый возраст")
        self._age = value

# Естественное использование:
user = User("Bob")
user.age = 30  # Вызывает сеттер с валидацией
print(user.age)  # Возраст: 30 лет (геттер форматирует данные)

Плюсы:
Инкапсуляция внутреннего состояния
Валидация при установке значений
Ленивые вычисления (например, загрузка данных по требованию)
Совместимость с обычным доступом к атрибутам

Минусы:
Избыточность для простых атрибутов без логики
Неочевидность побочных эффектов при чтении

ЧИТАТЬ ДАЛЕЕ …

Стек и очередь: что это такое и как они работают в жизни и программировании

Введение

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

Что такое очередь (FIFO)?

Очередь (Queue) — это структура данных, работающая по принципу FIFO (First In, First Out), что означает «первый пришел — первый ушел».
Пример из жизни — Представьте очередь в магазине:

Первый человек встал в очередь — он первым подойдет к кассе и уйдет.
Последний вставший человек будет обслуживаться последним.

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

Как очередь работает в программировании?
В коде очередь используется, например:

Обработка задач (первая отправленная задача выполняется первой).
Буферизация данных (например, при загрузке файлов).
Очередь сообщений в мессенджерах (первое отправленное сообщение приходит раньше остальных).

ЧИТАТЬ ДАЛЕЕ …

Тест с ответами по теме «Острые отравления неопиоидными анальгезирующими, жаропонижающими и противоревматическими средствами (по утвержденным клиническим рекомендациям) — 2024»

Вашему вниманию представляется Тест с ответами по теме «Острые отравления неопиоидными анальгезирующими, жаропонижающими и противоревматическими средствами (по утвержденным клиническим рекомендациям) — 2024» в рамках программы НМО: непрерывного медицинского образования для медицинских работников (врачи, медсестры и фармацевты). Тест с ответами по теме «Острые отравления неопиоидными анальгезирующими, жаропонижающими и противоревматическими средствами (по утвержденным клиническим рекомендациям) — 2024» в рамках программы НМО: непрерывного медицинского образования для медицинского персонала высшего и среднего звена (врачи, медицинские сестры и фармацевтические работники) позволяет успешнее подготовиться к итоговой аттестации и/или понять данную тему.

1. Ацетилсaлицилoвaя кислoтa является ингибитoрoм

1) ЦОГ-1 и ЦОГ-2, причем ЦОГ-2 бoлее чувствительнa;+
2) ЦОГ-2;
3) ЦОГ-1;
4) не является ингибитoрoм ЦОГ;
5) ЦОГ-1 и ЦОГ-2, причем ЦОГ-1 бoлее чувствительнa.

2. Брoнхoспaзм при oтрaвлении НПВП нaибoлее хaрaктерен для oтрaвлений

1) ингибитoрaми ЦОГ-2;
2) прoизвoдными пирaзoлoнa;
3) фенaмaтaми;
4) сaлицилaтaми;+
5) прoизвoдными фенилуксуснoй кислoты.

3. В прoцессе дезoргaнизaции цитoлеммa гепaтoцитoв приoбретaет aнтигенные свoйствa, чтo мoжет привoдить к

1) усилению синтезa желчи;
2) вoсстaнoвлению нoрмaльнoй структуры печенoчнoй ткaни;
3) стимуляции регенерaции печени;
4) индукции aутoиммуннoгo oтветa и вoспaлению;+
5) снижению рискa фибрoзa.

ЧИТАТЬ ДАЛЕЕ …

Почему обучение сегодня доступно как никогда, но важно оставаться бдительным

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

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

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

Также рекомендуется изучить несколько независимых источников. Например, портал https://edtechs.ru/prof/ предоставляет полезную информацию о современных образовательных трендах и проверенных платформах. Здесь можно найти обзоры курсов, советы по выбору направления и другие материалы, которые помогут принять взвешенное решение.

Главный совет — не торопитесь. Прежде чем оформлять кредит или подписывать договор, тщательно изучите условия обучения, стоимость и программу курса. Помните, что качественное образование требует времени и усилий, а мошенники часто играют на желании получить быстрый результат. Будьте терпеливы и критичны в своем выборе.

Обучение — это инвестиция в себя, которая может значительно улучшить качество вашей жизни. Но чтобы эта инвестиция оказалась успешной, важно выбирать надежные и проверенные ресурсы. Оставайтесь бдительными, изучайте информацию и принимайте решения осознанно. Тогда обучение станет не только полезным, но и безопасным шагом на пути к вашим целям.

ЧИТАТЬ ДАЛЕЕ …

Модуль 2. Домашняя работа по уроку "Цикл for. Элементы списка. Полезные функции в цикле"

Модуль 2. Домашняя работа по уроку «Цикл for. Элементы списка. Полезные функции в цикле»

Цель: закрепить навык решения задач при помощи цикла for, применив знания об основных типах данных.

Задача "Всё не так уж просто":
Дан список чисел numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
Используя этот список составьте второй список primes содержащий только простые числа.
А так же третий список not_primes, содержащий все не простые числа.
Выведите списки primes и not_primes на экран(в консоль).

Пункты задачи:

  • Создайте пустые списки primes и not_primes.
  • При помощи цикла for переберите список numbers.
  • Напишите ещё один цикл for (вложенный), где будут подбираться делители для числа из 1ого цикла.
  • Отметить простоту числа можно переменной is_prime, записав в неё занчение True перед проверкой.
  • В процессе проверки на простоту записывайте числа из списка numbers в списки primes и not_primes в зависимости от значения переменной is_prime после проверки (True — в prime, False — в not_prime).
  • Выведите списки primes и not_primes на экран(в консоль).

ЧИТАТЬ ДАЛЕЕ …

Модуль 2. Домашняя работа по уроку "Стиль кода часть II. Цикл While"

Модуль 2. Домашняя работа по уроку «Стиль кода часть II. Цикл While»

Цель: применить навыки создания цикла while, а так же применения операторов break и continue.

Задача "Нули ничто, отрицание недопустимо!":
Дан список чисел [42, 69, 322, 13, 0, 99, -5, 9, 8, 7, -6, 5]
Нужно выписывать из этого списка только положительные числа до тех пор, пока не встретите отрицательное или не закончится список (выход за границу).

Пункты задачи:

  • Запишите исходный список в переменную my_list.
  • Напишите цикл while с соответствующими задаче условиями.
  • Используйте операторы прерывания/продолжения цикла в соответствии с условиями задачи.

ЧИТАТЬ ДАЛЕЕ …

Модуль 2. Домашняя работа по уроку "Условная конструкция. Операторы if, elif, else"

Модуль 2. Домашняя работа по уроку «Условная конструкция. Операторы if, elif, else»

Цель: Применить навыки создания условных конструкций и знания операторов if, else, elif / and, or, not.

Задача "Все ли равны?":
На вход программе подаются 3 целых числа и записываются в переменные first, second и third соответственно.
Ваша задача написать условную конструкцию (из ifelifelse), которая выводит кол-во одинаковых чисел среди 3-х введённых.

Пункты задачи:

  1. Если все числа равны между собой, то вывести 3
  2. Если хотя бы 2 из 3 введённых чисел равны между собой, то вывести 2
  3. Если равных чисел среди 3-х вообще нет, то вывести 0

ЧИТАТЬ ДАЛЕЕ …

Модуль 2. Самостоятельная работа по уроку "Цели и задачи. Поток выполнения программы"

Модуль 2. Самостоятельная работа по уроку «Цели и задачи. Поток выполнения программы»

Самостоятельная работа по уроку "Цели и задачи. Поток выполнения программы. Как интерпретатор показывает переменные."

  1. Создайте новый проект
  2. В файл main.py добавьте следующий код
    print('Hi, PyCharm')
    x = 43
    y = 32
    print(x * y)
    print("End line")

    ЧИТАТЬ ДАЛЕЕ …

Модуль 1. Дополнительное практическое задание по модулю

Модуль 1. Дополнительное практическое задание по модулю

Цель: Применить знания полученные в модуле, решив задачу повышенного уровня сложности

Предисловие:

Сложность подобных задач заключается в:

  1. Отсутствии чёткого алгоритма решения. Его вы должны придумать сами на основе полученных ранее знаний (синтаксиса и инструментов).
  2. Объединении большинства тем изученного модуля.
  3. Предполагаемом большом объёме решения.

Задание "Средний балл":

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

На вход даны следующие данные:

  1. Список: grades = [[5, 3, 3, 5, 4], [2, 2, 2, 3], [4, 5, 5, 2], [4, 4, 3], [5, 5, 5, 4, 5]]

  2. Множество: students = {‘Johnny’, ‘Bilbo’, ‘Steve’, ‘Khendrik’, ‘Aaron’}

  3. Список grades содержит списки оценок для каждого ученика в алфавитном порядке.
    Например: ‘Aaron’ — [5, 3, 3, 5, 4]

  4. Множество students содержит неупорядоченную последовательность имён всех учеников в классе.

Напишите программу, которая составляет словарь, используя grades и students, где ключом будет имя ученика, а значением — его средний балл.

Вывод в консоль:

{'Aaron': 4.0, 'Bilbo': 2.25, 'Johhny': 4.0, 'Khendrik': 3.6666666666666665, 'Steve': 4.8}

ЧИТАТЬ ДАЛЕЕ …

Модуль 1. Практическое задание по теме "Словари и множества"

Модуль 1. Практическое задание по теме «Словари и множества»

Цель: Написать программу на языке Python, используя Pycharm, для работы со словарями и множествами.

  1. В проекте, где вы решаете домашние задания, создайте модуль ‘module_1_6.py‘ и напишите весь код в нём.
  2. Работа со словарями:
      — Создайте переменную my_dict и присвойте ей словарь из нескольких пар ключ-значение.
    Например: Имя (str) — Год рождения (int).
      — Выведите на экран словарь my_dict.
      — Выведите на экран одно значение по существующему ключу, одно по отсутствующему из словаря my_dict без ошибки.
      — Добавьте ещё две произвольные пары того же формата в словарь my_dict.
     — Удалите одну из пар в словаре по существующему ключу из словаря my_dict и выведите значение из этой пары на экран.
      — Выведите на экран словарь my_dict.

ЧИТАТЬ ДАЛЕЕ …

Модуль 1. Практическое задание по теме: "Неизменяемые и изменяемые объекты. Кортежи и списки"

Модуль 1. Практическое задание по теме: «Неизменяемые и изменяемые объекты. Кортежи и списки»

Цель: Написать программу на языке Python, используя Pycharm, для работы с неизменяемыми и изменяемыми объектами.

  1. В проекте, где вы решаете домашние задания, создайте модуль ‘module_1_5.py‘ и напишите весь код в нём.
  2. Задайте переменные разных типов данных:
      — Создайте переменную immutable_var и присвойте ей кортеж из нескольких элементов разных типов данных.
      — Выполните операции вывода кортежа immutable_var на экран.
  3. Изменение значений переменных:
      — Попытайтесь изменить элементы кортежа immutable_var. Объясните, почему нельзя изменить значения элементов кортежа.
  4. Создание изменяемых структур данных:
      — Создайте переменную mutable_list и присвойте ей список из нескольких элементов.
      — Измените элементы списка mutable_list.
      — Выведите на экран измененный список mutable_list.

ЧИТАТЬ ДАЛЕЕ …

Модуль 1. Практическая работа по уроку "Организация программ и методы строк"

Модуль 1. Практическая работа по уроку «Организация программ и методы строк»

Цель: Написать программу на языке Python с использованием Pycharm для работы с методами строк и организации программ.

  1. В проекте, где вы решаете домашние задания, создайте модуль ‘module_1_4.py‘ и напишите весь код в нём.
  2. Организуйте программу:
    1. Создайте переменную my_string и присвойте ей значение строки с произвольным текстом (функция input()).
    2. Вывести количество символов введённого текста
  3. Работа с методами строк:
    Используя методы строк, выполните следующие действия:

    1. Выведите строку my_string в верхнем регистре.
    2. Выведите строку my_string в нижнем регистре.
    3. Измените строку my_string, удалив все пробелы.
    4. Выведите первый символ строки my_string.
    5. Выведите последний символ строки my_string.

ЧИТАТЬ ДАЛЕЕ …

Мой отзыв об Образовательной организации: Центр повышения квалификации «ПАРТНЕР»

На курс “Администратор баз данных” попал случайно. Нажал на рекламу в игре, что можно пройти курс за счёт государства. Ради интереса нажал. Оформление было долгим, так как в этой схеме взаимодействуют три разные конторы, которые никак между собой не связаны. Но это видимо такая схема, когда ты берёшь курс за счёт государства.

Сам курс рассчитан на полных новичков, кто в IT полный ноль и из них хотят за 2 месяца сделать DBA. Большая часть людей (если не все) работают и те, кто в теме (например как я) успевают осваивать материал в срок и даже быстрее. Ну это и ожидаемо, когда ты в теме уже не первый год и там говорят про основы, то ты эти занятия даже не замечаешь и уже летишь вперёд. Так же благодаря опыту задаешь правильные вопросы и сравниваешь (в частности как это работает в PostgreSQL и например Oracle) с другими базами данных.

ЧИТАТЬ ДАЛЕЕ …

Модуль 1. Практическое задание по уроку "Строки и индексация строк"

Модуль 1. Практическое задание по уроку «Строки и индексация строк»

Цель: Научиться работать со строками и индексацией строк в Python.

Задача:

  1. В переменную example запишите любую строку.
  2. Выведите на экран(в консоль) первый символ этой строки.
  3. Выведите на экран(в консоль) последний символ этой строки (используя отрицательный индекс).
  4. Выведите на экран(в консоль) вторую половину этой строки (С нечётным количеством символов: ‘Urban’ -> ‘ban’).
  5. Выведите на экран(в консоль) это слово наоборот.
  6. Выведите на экран(в консоль) каждый второй символ этой строки. (Пример: ‘Топинамбур’->’оиабр’)
  7. Вводные данные:
    example = ‘Топинамбур’
    Вывод на экран(в консоль):

    Т
    р
    амбур
    рубманипоТ
    оиабр

ЧИТАТЬ ДАЛЕЕ …

Модуль 1. Практическая работа по уроку "Динамическая типизация"

Модуль 1. Практическая работа по уроку «Динамическая типизация»

Цель: Написать программу на языке Python, используя Pycharm, для демонстрации динамической типизации.

  1. В проекте, где вы решаете домашние задания, создайте модуль ‘module_1_3.py’ и напишите весь код в нём.
  2. Создайте переменные разных типов данных:
    • Создайте переменную name и присвойте ей значение вашего имени (строка).
    • Выведите значение переменной name на экран.
    • Создайте переменную age и присвойте ей значение вашего возраста (целое число).
    • Выведите значение переменной age на экран.
    • Перезапишите в age текущее значение переменной age + новое.

Как неверно (просто перезапись на новое число):
a = 15
a = 17

  • Выведите измененное значение переменной age на экран.
  • Создайте переменную is_student и присвойте ей значение True (логическое значение).
  • Выведите значение переменной is_student на экран.

Примечания:

  • Для вывода значений на экран используйте функцию print().
  • Обратите внимание на использование разных типов данных и возможности их изменения.

Пример результата выполнения программы:
Name: John
Age: 25
New Age: 26
Is Student: True

Успехов!

Решение:

Решение можно скачать с Boosty.to


Как можно отблагодарить:

  • Оформить удобную для вас подписку на Boosty.to
  • Разово поддержать через DonationAlerts