Друзья, в преддверии выхода нового курса, решил устроить распродажу
Сейчас вы можете приобрести мои курсы на степике по следующим ценам:
ООП: Объектно-ориентированное программирование на Python — 2072р
https://stepik.org/a/114354
Django, потанцуем? — 1875р
https://stepik.org/a/114288
Продвинутый python: заряди свои батарейки —1920р
https://stepik.org/a/127822
Pygame - учимся создавать свои игры - 600 ₽
https://stepik.org/a/118434
При оплате по СБП или банковским переводом (из РФ или из-за рубежа) предоставляется дополнительная скидка:
🎁 при покупке одного курса - 100р,
🎁🎁 при оплате двух курсов - 500р
🎁🎁🎁 при покупке трех - 1000р
По вопросам приобретения курсов обращайтесь в личные сообщения.
https://t.me/artem_egoroff
Сейчас вы можете приобрести мои курсы на степике по следующим ценам:
ООП: Объектно-ориентированное программирование на Python — 2072р
https://stepik.org/a/114354
Django, потанцуем? — 1875р
https://stepik.org/a/114288
Продвинутый python: заряди свои батарейки —1920р
https://stepik.org/a/127822
Pygame - учимся создавать свои игры - 600 ₽
https://stepik.org/a/118434
При оплате по СБП или банковским переводом (из РФ или из-за рубежа) предоставляется дополнительная скидка:
🎁 при покупке одного курса - 100р,
🎁🎁 при оплате двух курсов - 500р
🎁🎁🎁 при покупке трех - 1000р
По вопросам приобретения курсов обращайтесь в личные сообщения.
https://t.me/artem_egoroff
🔥18👍4
В честь прошедшего дня программиста предлагаю воспользоваться промокодом Я_У_МАМЫ_ПРОГРАММИСТ, который позволит приобрести мои платные курсы со скидкой до 30%:
ООП: Объектно-ориентированное программирование на Python
Django, потанцуем?
Продвинутый python: заряди свои батарейки
Pygame - учимся создавать свои игры
Применить промокод Я_У_МАМЫ_ПРОГРАММИСТ можно при оплате курса по указанным выше ссылкам
ООП: Объектно-ориентированное программирование на Python
Django, потанцуем?
Продвинутый python: заряди свои батарейки
Pygame - учимся создавать свои игры
Применить промокод Я_У_МАМЫ_ПРОГРАММИСТ можно при оплате курса по указанным выше ссылкам
🔥20❤2
Функции lambda + map
Очень часто можно встретить комбинацию анонимной функции внутри вызова map. Использование lambda функции помогает избежать определение обычной функции, делая код короче.
В данном примере мы возводим в квадрат все элементы списка numbers при помощи map и lambda функций
Не знаешь, что такое map или анонимная функция?
Мой бесплатный курс по функциональному программированию поможет тебе разобраться в этих темах
https://stepik.org/course/195619/promo
Очень часто можно встретить комбинацию анонимной функции внутри вызова map. Использование lambda функции помогает избежать определение обычной функции, делая код короче.
В данном примере мы возводим в квадрат все элементы списка numbers при помощи map и lambda функций
Не знаешь, что такое map или анонимная функция?
Мой бесплатный курс по функциональному программированию поможет тебе разобраться в этих темах
https://stepik.org/course/195619/promo
👍20❤2🔥1
Функция enumerate
В python есть элегантный способ обойти элементы коллекции, сразу получая за итерацию индекс и значение элемента коллекции. Это функция enumerate.
А вы знали, что функция enumerate:
☑️ на самом деле является классом, а не функцией?
☑️ возвращает итератор в качестве своей работы?
Еще больше подробностей об enumerate и других функциях вы можете найти на моем бесплатном курсе
Функциональное программирование на Python
В python есть элегантный способ обойти элементы коллекции, сразу получая за итерацию индекс и значение элемента коллекции. Это функция enumerate.
А вы знали, что функция enumerate:
☑️ на самом деле является классом, а не функцией?
☑️ возвращает итератор в качестве своей работы?
Еще больше подробностей об enumerate и других функциях вы можете найти на моем бесплатном курсе
Функциональное программирование на Python
❤13👍7
Класс defaultdict для упрощения работы со словарями
Модуль collections в Python предоставляет специальный тип словаря, называемый defaultdict. Он позволяет автоматически создавать значения для новых ключей, что значительно упрощает работу с словарями.
Для инициализации значения нового ключа в defaultdict достаточно передать тип желаемого значения. В примере ниже мы указываем тип list для всех наших ключей, следовательно
по умолчанию все значения ключей будут являться пустыми списками. Причем обращение к новому ключу не вызывает ошибки KeyError, а создает новую пару, где значением будет тот тип данных, который был передан при создании defaultdict
Еще больше подробностей про defaultdict и практики по этой теме можно найти в курсе
Продвинутый python: заряди свои батарейки
Модуль collections в Python предоставляет специальный тип словаря, называемый defaultdict. Он позволяет автоматически создавать значения для новых ключей, что значительно упрощает работу с словарями.
Для инициализации значения нового ключа в defaultdict достаточно передать тип желаемого значения. В примере ниже мы указываем тип list для всех наших ключей, следовательно
from collections import defaultdict
# создание defaultdict, использующего list() в качестве значения по умолчанию
marks = defaultdict(list)
# добавление элементов в словарь
marks['Asya'].append(5)
marks['Asya'].append(4)
# обращение к несуществующему ключу
print(marks['Kate']) # выведет [], так как list() возвращает []
# обращаясь к несуществующему ключу John,
# получаем значение по умолчанию и сразу расширяем его списком [4, 5, 5, 4]
marks['John'].extend([4, 5, 5, 4])
marks['John'].append(3)
print(marks) # {'Asya': [5, 4], 'Kate': [], 'John': [4, 5, 5, 4, 3]}
по умолчанию все значения ключей будут являться пустыми списками. Причем обращение к новому ключу не вызывает ошибки KeyError, а создает новую пару, где значением будет тот тип данных, который был передан при создании defaultdict
Еще больше подробностей про defaultdict и практики по этой теме можно найти в курсе
Продвинутый python: заряди свои батарейки
Stepik: online education
Объект defaultdict
👍13🔥5❤2
🧑🎓 Что такое итератор?
Итератор в Python — это объект, в реализации которого имеются два магических метода:
1️⃣ __iter()__
2️⃣ __next()__
За счет этого итераторы обладают способностью работать со встроенными функциями next() и iter().
📚 Основное предназначение - организация последовательного перебора элементов объекта. Итераторы используются для работы с циклом for и обеспечивают ленивую генерацию данных, не загружая их все сразу в память. Каждый вызов метода next() возвращает следующий элемент, а при отсутствии элементов выбрасывается исключение
Ниже представлена реализация итератора внутри класса Student, позволяющая последовательно обходить все символы имени и фамилии студента:
✏️ Итераторы полезны для работы с большими данными и потоками данных.
Подробности и практику по итераторам можно найти здесь:
https://stepik.org/lesson/1367599/step/1?unit=1383640
https://stepik.org/lesson/682559/step/1?unit=681371
Итератор в Python — это объект, в реализации которого имеются два магических метода:
1️⃣ __iter()__
2️⃣ __next()__
За счет этого итераторы обладают способностью работать со встроенными функциями next() и iter().
📚 Основное предназначение - организация последовательного перебора элементов объекта. Итераторы используются для работы с циклом for и обеспечивают ленивую генерацию данных, не загружая их все сразу в память. Каждый вызов метода next() возвращает следующий элемент, а при отсутствии элементов выбрасывается исключение
StopIteration. Ниже представлена реализация итератора внутри класса Student, позволяющая последовательно обходить все символы имени и фамилии студента:
class Student:
def __init__(self, name, surname):
self.name = name
self.surname = surname
self.index = 0
def __iter__(self):
return self
@property
def full_name(self):
return self.name + ' ' + self.surname
def __next__(self):
if self.index >= len(self.full_name):
self.index = 0
raise StopIteration
self.index += 1
return self.full_name[self.index - 1]
ivan = Student('Ivan', 'Sidorov')
for s in ivan:
print(s)
✏️ Итераторы полезны для работы с большими данными и потоками данных.
Подробности и практику по итераторам можно найти здесь:
https://stepik.org/lesson/1367599/step/1?unit=1383640
https://stepik.org/lesson/682559/step/1?unit=681371
🔥12
🧑🎓 Что такое `__slots__`?
📝 Пример использования
В экземплярах класса PointSlots после указания атрибута __slots__ допустимо обращаться только к атрибутам x и y. При попытке создать новый атрибут или обратиться к словарю __dict__ будет возникать ошибка AttributeError
📚 Основное предназначение __slots__ - зафиксировать определенное множество атрибутов, которые доступны экземплярам.
✏️ При использовании __slots__ Python не создает обычный словарь __dict__ для хранения атрибутов, а вместо этого выделяет фиксированное место для указанных атрибутов. Это помогает повысить производительность и экономить память, особенно при создании большого числа объектов.
__slots__ — это специальный магических атрибут в Python, который позволяет ограничить количество атрибутов для экземпляров класса. 📝 Пример использования
class PointSlots:
# Перечисляем все возможные атрибуты экземпляров класса
__slots__ = ('x', 'y')
def __init__(self, x, y):
self.x = x
self.y = y
p = PointSlots(3, 4)
print(p.x) # 3
print(p.y) # 4
В экземплярах класса PointSlots после указания атрибута __slots__ допустимо обращаться только к атрибутам x и y. При попытке создать новый атрибут или обратиться к словарю __dict__ будет возникать ошибка AttributeError
print(p.__dict__)
# AttributeError: 'PointSlots' object has no attribute '__dict__'
p.z = 100
# AttributeError: 'PointSlots' object has no attribute 'z'
📚 Основное предназначение __slots__ - зафиксировать определенное множество атрибутов, которые доступны экземплярам.
✏️ При использовании __slots__ Python не создает обычный словарь __dict__ для хранения атрибутов, а вместо этого выделяет фиксированное место для указанных атрибутов. Это помогает повысить производительность и экономить память, особенно при создании большого числа объектов.
🔥8👍4❤1
🧑🎓 Сколько дней ждать до дня рождения?
С помощью python можно написать простой калькулятор, который определит какое количество дней осталось ждать до определенной даты от текущего момента. При помощи такой программы, например, можно посчитать сколько еще дней ждать своего следующего дня рождения.
📚 Для написания кода вам потребуется знание стандартного модуля datetime, который позволяет удобно работать с календарными датами и временем.
✏️ Пример реализации такой программы показан ниже:
🧑🏫 Подтянуть знания по модулю datetime и порешать другие задачи можно на данном курсе.
#python #урокиpython
С помощью python можно написать простой калькулятор, который определит какое количество дней осталось ждать до определенной даты от текущего момента. При помощи такой программы, например, можно посчитать сколько еще дней ждать своего следующего дня рождения.
📚 Для написания кода вам потребуется знание стандартного модуля datetime, который позволяет удобно работать с календарными датами и временем.
✏️ Пример реализации такой программы показан ниже:
from datetime import datetime
def days_to_birthday(date_str: str) -> int:
dt = datetime.strptime(date_str, '%d.%m.%Y')
current_date = datetime.now()
happy_birthday = datetime(current_date.year, dt.month, dt.day)
if not current_date < happy_birthday:
happy_birthday = happy_birthday.replace(year=current_date.year + 1)
return (happy_birthday - current_date).days + 1
birthday = input('Введите дату рождения в формате дд.мм.гггг: ')
days_remaining = days_to_birthday(birthday)
print(f"{days_remaining} - именно столько дней осталось ждать вашего дня рождения")
🧑🏫 Подтянуть знания по модулю datetime и порешать другие задачи можно на данном курсе.
#python #урокиpython
Stepik: online education
Продвинутый python: заряди свои батарейки
Данный курс позволит вам познакомиться со всеми основными модулями стандартной библиотеке python (за исключением модулей asyncio, multiprocessing, threading)
Вы получите массу новых знаний, решите уйму задач на программирование, причем задания будут как…
Вы получите массу новых знаний, решите уйму задач на программирование, причем задания будут как…
👍8🔥1
🧑🎓 В чем разница между операторами is и ==
В Python есть два оператора == и is , которые используются для сравнения. Может показаться, что они работают одинаково, но это не так.
✏️ Оператор == проверяет равенство значений, то есть он оценивает, являются ли значения двух объектов одинаковыми. При этом сами объекты могут храниться в совершенно разных ячейках памяти.
📚 С другой стороны, оператор is проверяет идентичность, то есть он определяет, указывают ли две переменные на один и тот же объект в памяти. При таком варианте сравнения важно, чтобы совпали не сами значения, которые хранятся в объектах, а номера ячеек в памяти.
В Python есть два оператора == и is , которые используются для сравнения. Может показаться, что они работают одинаково, но это не так.
✏️ Оператор == проверяет равенство значений, то есть он оценивает, являются ли значения двух объектов одинаковыми. При этом сами объекты могут храниться в совершенно разных ячейках памяти.
lst1 = [1, 2, 3]
lst2 = [1, 2, 3]
lst3 = lst1
print(lst1 == lst2) # True
print(lst1 == lst3) # True
print(lst2 == lst3) # True
print(id(lst1) == id(lst2)) # False
print(id(lst1) == id(lst3)) # True
print(id(lst2) == id(lst3)) # False
📚 С другой стороны, оператор is проверяет идентичность, то есть он определяет, указывают ли две переменные на один и тот же объект в памяти. При таком варианте сравнения важно, чтобы совпали не сами значения, которые хранятся в объектах, а номера ячеек в памяти.
lst1 = [1, 2, 3]
lst2 = [1, 2, 3]
lst3 = lst1
print(lst1 is lst2) # False
print(lst1 is lst3) # True
print(lst2 is lst3) # False
👍23❤3
🔝 🔝 🔝Самые популярные СУБД в начале 2025 года
СУБД (Системы управления базами данных) являются основой современных информационных технологий, обеспечивая хранение, управление и доступ к данным. На рынке представлено огромное количество различных СУБД, и сервис db-engines.com/en/ поможет разобраться в этом многообразии.
Более того, DB-Engines ведет собственный рейтинг популярности СУБД, который обновляется регулярно. На январь 2025 года пятерка самых популярных систем выглядит следующим образом:
1 место - Oracle: реляционная, мульти-модельная СУБД, поддерживающая документное хранение, графовые базы данных, RDF-хранилища, пространственные данные и векторные функции. Широко используется в корпоративных приложениях благодаря своей надежности и масштабируемости.
2 место - MySQL: открытая реляционная СУБД, также поддерживающая документное хранение и пространственные данные. Популярна среди веб-разработчиков и используется в многочисленных веб-приложениях и онлайн-сервисах.
3 место - Microsoft SQL Server: реляционная, мульти-модельная СУБД от Microsoft, включающая поддержку документарного хранения, графовых баз данных и пространственных данных. Интегрируется с другими продуктами Microsoft и широко применяется в бизнес-среде.
4 место - PostgreSQL: открытая реляционная, мульти-модельная СУБД, поддерживающая документное хранение, графовые базы данных, пространственные данные и векторные функции. Известна своей расширяемостью и соответствием стандартам SQL, что делает ее популярной среди разработчиков и исследователей.
5 место - MongoDB: Документно-ориентированная, мульти-модельная СУБД, поддерживающая хранение пространственных данных, функции поиска, временные ряды и векторные данные. Предназначена для работы с неструктурированными данными и широко используется в приложениях, требующих гибкости в структуре данных.
Эти системы занимают лидирующие позиции благодаря своей функциональности, производительности и способности адаптироваться к разнообразным требованиям современных приложений.
💬 Поделитесь в комментариях с какими СУБД вам доводилось работать
СУБД (Системы управления базами данных) являются основой современных информационных технологий, обеспечивая хранение, управление и доступ к данным. На рынке представлено огромное количество различных СУБД, и сервис db-engines.com/en/ поможет разобраться в этом многообразии.
Более того, DB-Engines ведет собственный рейтинг популярности СУБД, который обновляется регулярно. На январь 2025 года пятерка самых популярных систем выглядит следующим образом:
1 место - Oracle: реляционная, мульти-модельная СУБД, поддерживающая документное хранение, графовые базы данных, RDF-хранилища, пространственные данные и векторные функции. Широко используется в корпоративных приложениях благодаря своей надежности и масштабируемости.
2 место - MySQL: открытая реляционная СУБД, также поддерживающая документное хранение и пространственные данные. Популярна среди веб-разработчиков и используется в многочисленных веб-приложениях и онлайн-сервисах.
3 место - Microsoft SQL Server: реляционная, мульти-модельная СУБД от Microsoft, включающая поддержку документарного хранения, графовых баз данных и пространственных данных. Интегрируется с другими продуктами Microsoft и широко применяется в бизнес-среде.
4 место - PostgreSQL: открытая реляционная, мульти-модельная СУБД, поддерживающая документное хранение, графовые базы данных, пространственные данные и векторные функции. Известна своей расширяемостью и соответствием стандартам SQL, что делает ее популярной среди разработчиков и исследователей.
5 место - MongoDB: Документно-ориентированная, мульти-модельная СУБД, поддерживающая хранение пространственных данных, функции поиска, временные ряды и векторные данные. Предназначена для работы с неструктурированными данными и широко используется в приложениях, требующих гибкости в структуре данных.
Эти системы занимают лидирующие позиции благодаря своей функциональности, производительности и способности адаптироваться к разнообразным требованиям современных приложений.
💬 Поделитесь в комментариях с какими СУБД вам доводилось работать
Db-Engines
DB-Engines - Knowledge Base of Relational and NoSQL Database Management Systems
DB-Engines is an initiative to collect and present information on relational and NoSQL database management systems (DBMS)
👍3
🚀 Продолжай прокачивать Python со скидкой до 30%! 🔥
Ты уже освоил основы программирования и хочешь подняться на новый уровень? Тогда лови возможность углубить свои знания и расширить навыки с нашими продвинутыми курсами!
⚡️ Скидки до 30% только до 9 февраля на самые актуальные курсы:
☑️ ООП: Объектно-ориентированное программирование на Python
☑️ Функциональное программирование на Python
☑️ Продвинутый python: заряди свои батарейки
☑️ Инди курс по Pygame - учимся создавать свои игры
☑️ Django, потанцуем?
⏳ Время ограничено! Скидка действует только до 9 февраля.
👉 Успей улучшить свои навыки и выделиться среди профессионалов! Выбирай курс и начни прокачку уже сегодня!
Ты уже освоил основы программирования и хочешь подняться на новый уровень? Тогда лови возможность углубить свои знания и расширить навыки с нашими продвинутыми курсами!
⚡️ Скидки до 30% только до 9 февраля на самые актуальные курсы:
☑️ ООП: Объектно-ориентированное программирование на Python
☑️ Функциональное программирование на Python
☑️ Продвинутый python: заряди свои батарейки
☑️ Инди курс по Pygame - учимся создавать свои игры
☑️ Django, потанцуем?
⏳ Время ограничено! Скидка действует только до 9 февраля.
👉 Успей улучшить свои навыки и выделиться среди профессионалов! Выбирай курс и начни прокачку уже сегодня!
🔥4
🐍 Генераторы списков в Python (List Comprehensions)
Генераторы списков, они же List Comprehensions — это удобный и быстрый способ создавать списки на основе других итерируемых объектов, таких как списки, строки или диапазоны. Этот синтаксис позволяет писать компактный, читаемый и производительный код.
📚 Пример: Создание списка квадратов чисел
Допустим, мы хотим создать список квадратов чисел от 1 до 10. Вот как это сделать с использованием списковых включений:
Результат одинаковый, но вторая версия гораздо короче и проще для понимания.
🌟 Фильтрация данных
С помощью списковых включений можно легко добавлять условия. Например, создадим список квадратов только для чётных чисел:
Здесь if i % 2 == 0 фильтрует числа, оставляя только чётные.
🛠 Практическое применение: Перевод строк в верхний регистр
Допустим, у нас есть список строк, и мы хотим преобразовать их в верхний регистр:
💡 Почему это важно?
Генераторы списков:
✔️ Уменьшают количество строк кода.
✔️ Повышают читаемость.
✔️ Работают быстрее, чем традиционные циклы, так как оптимизированы внутри Python.
🚀 Хотите узнать больше?
💬 Записывайтесь на бесплатный Инди-курс программирования на Python уже сегодня и сделайте первый шаг к мастерству в Python!
Генераторы списков, они же List Comprehensions — это удобный и быстрый способ создавать списки на основе других итерируемых объектов, таких как списки, строки или диапазоны. Этот синтаксис позволяет писать компактный, читаемый и производительный код.
📚 Пример: Создание списка квадратов чисел
Допустим, мы хотим создать список квадратов чисел от 1 до 10. Вот как это сделать с использованием списковых включений:
# Классический способ с использованием цикла
squares = []
for i in range(1, 11):
squares.append(i ** 2)
print(squares) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# Генератор списка
squares = [i ** 2 for i in range(1, 11)]
print(squares) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Результат одинаковый, но вторая версия гораздо короче и проще для понимания.
🌟 Фильтрация данных
С помощью списковых включений можно легко добавлять условия. Например, создадим список квадратов только для чётных чисел:
even_squares = [i ** 2 for i in range(1, 11) if i % 2 == 0]
print(even_squares) # [4, 16, 36, 64, 100]
Здесь if i % 2 == 0 фильтрует числа, оставляя только чётные.
🛠 Практическое применение: Перевод строк в верхний регистр
Допустим, у нас есть список строк, и мы хотим преобразовать их в верхний регистр:
words = ["пример", "использования", "list", "comprehension"]
uppercase = [word.upper() for word in words]
print(uppercase) # ['ПРИМЕР', 'ИСПОЛЬЗОВАНИЯ', 'LIST', 'COMPREHENSION']
💡 Почему это важно?
Генераторы списков:
✔️ Уменьшают количество строк кода.
✔️ Повышают читаемость.
✔️ Работают быстрее, чем традиционные циклы, так как оптимизированы внутри Python.
🚀 Хотите узнать больше?
💬 Записывайтесь на бесплатный Инди-курс программирования на Python уже сегодня и сделайте первый шаг к мастерству в Python!
👍11
⚡️ Метаклассы в Python: полный контроль над классами!
💭 Вы когда-нибудь задумывались, кто управляет классами в Python?
Обычные классы создают объекты. Но кто создаёт сами классы? 🤯
Ответ: Метаклассы. Они позволяют автоматически изменять структуру классов, добавлять новые свойства и даже контролировать создание объектов! Это мощный инструмент, который используют в ORM, веб-фреймворках и крупных проектах.
📚 Что такое метаклассы?
В Python всё является объектом, включая сами классы. Метаклассы — это классы, которые управляют созданием других классов.
🛠 Что они могут делать?
✅ Автоматически модифицировать классы при их объявлении.
✅ Добавлять новые методы и атрибуты.
✅ Проверять корректность классов перед созданием.
✅ Реализовывать шаблоны проектирования (Singleton, ORM, фабрики и т. д.).
📌 Простой пример метакласса
Создадим метакласс Meta, который автоматически добавляет в любой класс метод info() и атрибут category:
💡 Как это работает?
1️⃣ Метакласс Meta наследуется от type, что делает его метаклассом;
2️⃣ В методе __new__ изменяется поведение создаваемого класса:
➖ добавляется метод info(), который выводит имя класса;
➖ добавляется атрибут category, общий для всех классов, использующих этот метакласс.
3️⃣ При создании MyClass все эти изменения автоматически применяются.
🔹 Теперь любой класс, использующий Meta, автоматически получает и метод, и атрибут!
⚙️ Практический пример: Singleton с метаклассом
Одиночка (Singleton) — это шаблон, который гарантирует, что у класса есть только один экземпляр.
Принцип работы SingletonMeta:
— метод call() в метаклассе контролирует создание новых экземпляров;
— если объект уже существует, возвращается существующий экземпляр;
Таким образом, db1 и db2 — это один и тот же экземпляр, несмотря на разные аргументы.
🚀 Когда использовать метаклассы?
🔹 Когда нужно автоматически изменять или проверять классы при их объявлении.
🔹 Когда нужно изменить стандартное поведение создания объектов (например, реализовать Singleton).
🎓 Хотите углубиться в Python?
Метаклассы — это лишь одна из мощных возможностей ООП в Python.
📢 На нашем курсе по Объектно-ориентированному программированию (ООП) мы разберём:
✅ Как создавать свои собственные классы;
✅ Основные принципы ООП такие как инкапсуляция, наследование и полиморфизм;
✅ Метаклассы, декораторы, дескрипторы и многое другое.
🚀 А промокод ЯНВАРЬ даёт скидку на курс!
🎓 Записывайтесь прямо сейчас и прокачивайте навыки Python на новый уровень! 🐍🔥
🔗 Курс ООП в Python: https://stepik.org/a/114354
💭 Вы когда-нибудь задумывались, кто управляет классами в Python?
Обычные классы создают объекты. Но кто создаёт сами классы? 🤯
Ответ: Метаклассы. Они позволяют автоматически изменять структуру классов, добавлять новые свойства и даже контролировать создание объектов! Это мощный инструмент, который используют в ORM, веб-фреймворках и крупных проектах.
📚 Что такое метаклассы?
В Python всё является объектом, включая сами классы. Метаклассы — это классы, которые управляют созданием других классов.
🛠 Что они могут делать?
✅ Автоматически модифицировать классы при их объявлении.
✅ Добавлять новые методы и атрибуты.
✅ Проверять корректность классов перед созданием.
✅ Реализовывать шаблоны проектирования (Singleton, ORM, фабрики и т. д.).
📌 Простой пример метакласса
Создадим метакласс Meta, который автоматически добавляет в любой класс метод info() и атрибут category:
class Meta(type):
def __new__(cls, name, bases, dct):
# Добавляем метод info(), который выводит название класса
dct["info"] = lambda self: f"Это класс {name}"
# Добавляем атрибут category
dct["category"] = "Автоматически создано"
return super().__new__(cls, name, bases, dct)
# Используем метакласс
class MyClass(metaclass=Meta):
pass
obj = MyClass()
# Проверяем, что метод info() добавлен
print(obj.info()) # Это класс MyClass
# Проверяем, что атрибут category добавлен
print(MyClass.category) # Автоматически создано
💡 Как это работает?
1️⃣ Метакласс Meta наследуется от type, что делает его метаклассом;
2️⃣ В методе __new__ изменяется поведение создаваемого класса:
➖ добавляется метод info(), который выводит имя класса;
➖ добавляется атрибут category, общий для всех классов, использующих этот метакласс.
3️⃣ При создании MyClass все эти изменения автоматически применяются.
🔹 Теперь любой класс, использующий Meta, автоматически получает и метод, и атрибут!
⚙️ Практический пример: Singleton с метаклассом
Одиночка (Singleton) — это шаблон, который гарантирует, что у класса есть только один экземпляр.
class SingletonMeta(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super().__call__(*args, **kwargs)
return cls._instances[cls]
class Database(metaclass=SingletonMeta):
def __init__(self, db_name):
self.db_name = db_name
db1 = Database("main.db")
db2 = Database("backup.db")
print(db1 is db2) # True
print(db1.db_name) # main.db
print(db2.db_name) # main.db
Принцип работы SingletonMeta:
— метод call() в метаклассе контролирует создание новых экземпляров;
— если объект уже существует, возвращается существующий экземпляр;
Таким образом, db1 и db2 — это один и тот же экземпляр, несмотря на разные аргументы.
🚀 Когда использовать метаклассы?
🔹 Когда нужно автоматически изменять или проверять классы при их объявлении.
🔹 Когда нужно изменить стандартное поведение создания объектов (например, реализовать Singleton).
🎓 Хотите углубиться в Python?
Метаклассы — это лишь одна из мощных возможностей ООП в Python.
📢 На нашем курсе по Объектно-ориентированному программированию (ООП) мы разберём:
✅ Как создавать свои собственные классы;
✅ Основные принципы ООП такие как инкапсуляция, наследование и полиморфизм;
✅ Метаклассы, декораторы, дескрипторы и многое другое.
🚀 А промокод ЯНВАРЬ даёт скидку на курс!
🎓 Записывайтесь прямо сейчас и прокачивайте навыки Python на новый уровень! 🐍🔥
🔗 Курс ООП в Python: https://stepik.org/a/114354
Stepik: online education
ООП: Объектно-ориентированное программирование на Python
Курс позволит изучить тему ООП и повысить свой уровень владения Python
Данный курс является логическим продолжением моего курса, посвященному основам программирования на Python
Без знания основ Python данный курс будет сложен для усвоения.
Данный курс является логическим продолжением моего курса, посвященному основам программирования на Python
Без знания основ Python данный курс будет сложен для усвоения.
🔥10👍6
🎉 В преддверии нового курса — СКИДКИ до 30%!
Впереди — запуск нового авторского курса. А пока вы его ждёте, у вас есть отличная возможность прокачать свои знания Python и приобрести уже готовые курсы со скидкой до 30%! 🚀
🎓 Доступные курсы со скидкой:
☑️ Функциональное программирование на Python
☑️ ООП: Объектно-ориентированное программирование на Python
☑️ Продвинутый Python: заряди свои батарейки
☑️ Django, потанцуем?
📌 Все курсы:
✅ Содержат практику, тесты и понятную теорию
✅ Актуальны для последних версий Python
✅ Дают доступ навсегда + сертификат по окончании
💳 Скидка применяется автоматически при переходе по ссылке и оплате!
⏳ Акция действует ограниченное время. Успейте записаться и сделать следующий шаг в программировании! 🐍
Впереди — запуск нового авторского курса. А пока вы его ждёте, у вас есть отличная возможность прокачать свои знания Python и приобрести уже готовые курсы со скидкой до 30%! 🚀
🎓 Доступные курсы со скидкой:
☑️ Функциональное программирование на Python
☑️ ООП: Объектно-ориентированное программирование на Python
☑️ Продвинутый Python: заряди свои батарейки
☑️ Django, потанцуем?
📌 Все курсы:
✅ Содержат практику, тесты и понятную теорию
✅ Актуальны для последних версий Python
✅ Дают доступ навсегда + сертификат по окончании
💳 Скидка применяется автоматически при переходе по ссылке и оплате!
⏳ Акция действует ограниченное время. Успейте записаться и сделать следующий шаг в программировании! 🐍
Stepik: online education
Функциональное программирование на Python
🚀 "Функциональное программирование на Python" — следующий этап для тех, кто уже освоил основы Python и хочет вывести свои навыки на новый уровень!
📚 Освойте продвинутые техники Python: функции высшего порядка, рекурсию, итераторы, генераторы и декораторы.…
📚 Освойте продвинутые техники Python: функции высшего порядка, рекурсию, итераторы, генераторы и декораторы.…
🔥9❤5
🎉 Грандиозная новогодняя распродажа на курсы по Python!
Начни год с развития и прокачки своих навыков 🧠💻
Скидки до 50% по промокоду JANUARY 🔥
📚 Курсы со скидкой:
🔰 Функциональное программирование на Python
🔧 ООП: Объектно-ориентированное программирование на Python
🌐 Django, потанцуем? 💃
⚡️ Продвинутый Python: заряди свои батарейки 🔋
🧪 Инди курс по Pygame - учимся создавать свои игры
Обратите внимание на программу
Python: базовый минимум🧰
Это универсальный стартовый набор для новичков:
Вы получите доступ сразу к нескольким курсам, объединённым в одну логичную программу.
Пройдя их, вы построите прочную основу и сможете двигаться дальше в любой сфере программирования.
🎁 На этот курс тоже действует скидка по промокоду!
💡 Как применить скидку?
1️⃣ Перейдите по ссылке на нужный курс — цена уже указана со скидкой!
2️⃣ Или при оплате введите промокод: JANUARY
⏳ Не упустите возможность — скидка ограничена по времени.
Начните год с выгодного вложения в себя! 🚀
Начни год с развития и прокачки своих навыков 🧠💻
Скидки до 50% по промокоду JANUARY 🔥
📚 Курсы со скидкой:
🔰 Функциональное программирование на Python
🔧 ООП: Объектно-ориентированное программирование на Python
🌐 Django, потанцуем? 💃
⚡️ Продвинутый Python: заряди свои батарейки 🔋
🧪 Инди курс по Pygame - учимся создавать свои игры
Обратите внимание на программу
Python: базовый минимум🧰
Это универсальный стартовый набор для новичков:
Вы получите доступ сразу к нескольким курсам, объединённым в одну логичную программу.
Пройдя их, вы построите прочную основу и сможете двигаться дальше в любой сфере программирования.
🎁 На этот курс тоже действует скидка по промокоду!
💡 Как применить скидку?
1️⃣ Перейдите по ссылке на нужный курс — цена уже указана со скидкой!
2️⃣ Или при оплате введите промокод: JANUARY
⏳ Не упустите возможность — скидка ограничена по времени.
Начните год с выгодного вложения в себя! 🚀
🔥4❤1