Python Mixins: мощный инструмент для повторного использования кода
В Python Mixin — это особый вид класса, который используется для расширения функционала других классов без необходимости создавать сложные иерархии наследования. Mixin-классы сами по себе, как правило, не предназначены для самостоятельного использования — они лишь добавляют дополнительное поведение.
Основная идея Mixin
Mixin — это способ «влить» функциональность в класс, комбинируя его с другими классами через множественное наследование.
Например, если у нас есть класс
Принципы проектирования Mixin-классов
1. Изолированная функциональность — Mixin должен решать только одну конкретную задачу.
2. Не самостоятельный — Mixin не предназначен для создания экземпляров напрямую.
3. Малые зависимости — Mixin не должен жёстко зависеть от конкретной реализации других классов.
4. Имя — принято добавлять суффикс
Зачем использовать Mixin
- Повторное использование кода без дублирования.
- Упрощение кода и снижение связности.
- Гибкость при расширении функционала.
Пример: добавление сериализации в JSON
Когда Mixin лучше не использовать
- Когда поведение может быть реализовано через композицию.
- Если множественное наследование приведёт к сложной и запутанной иерархии.
- Когда Mixin начинает выполнять слишком много функций.
Mixin — это мощный и элегантный способ добавлять функционал в классы Python, сохраняя код чистым и гибким. Но использовать их стоит осторожно, чтобы избежать проблем с читаемостью и сложным наследованием.
https://realpython.com/python-mixin/
#python
👉 @python_real
В Python Mixin — это особый вид класса, который используется для расширения функционала других классов без необходимости создавать сложные иерархии наследования. Mixin-классы сами по себе, как правило, не предназначены для самостоятельного использования — они лишь добавляют дополнительное поведение.
Основная идея Mixin
Mixin — это способ «влить» функциональность в класс, комбинируя его с другими классами через множественное наследование.
Например, если у нас есть класс
LoggerMixin
, он может добавлять возможность логирования в любой класс, который его наследует.
class LoggerMixin:
def log(self, message):
print(f"[LOG]: {message}")
class User(LoggerMixin):
def __init__(self, name):
self.name = name
user = User("Alice")
user.log("Пользователь создан") # [LOG]: Пользователь создан
Принципы проектирования Mixin-классов
1. Изолированная функциональность — Mixin должен решать только одну конкретную задачу.
2. Не самостоятельный — Mixin не предназначен для создания экземпляров напрямую.
3. Малые зависимости — Mixin не должен жёстко зависеть от конкретной реализации других классов.
4. Имя — принято добавлять суффикс
Mixin
в название.Зачем использовать Mixin
- Повторное использование кода без дублирования.
- Упрощение кода и снижение связности.
- Гибкость при расширении функционала.
Пример: добавление сериализации в JSON
import json
class ToJSONMixin:
def to_json(self):
return json.dumps(self.__dict__)
class Point(ToJSONMixin):
def __init__(self, x, y):
self.x = x
self.y = y
p = Point(4, 5)
print(p.to_json()) # {"x": 4, "y": 5}
Когда Mixin лучше не использовать
- Когда поведение может быть реализовано через композицию.
- Если множественное наследование приведёт к сложной и запутанной иерархии.
- Когда Mixin начинает выполнять слишком много функций.
Mixin — это мощный и элегантный способ добавлять функционал в классы Python, сохраняя код чистым и гибким. Но использовать их стоит осторожно, чтобы избежать проблем с читаемостью и сложным наследованием.
https://realpython.com/python-mixin/
#python
👉 @python_real
❤3👍2
14 августа (уже в четверг!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Python-разработчика.
Как это будет:
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Python-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_py_bot
Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
📂 Как получить список всех файлов в директории на Python
Статья о том, как с помощью Python получать список файлов в директориях. Рассмотрены различные способы, включая использование модулей
Особое внимание уделено:
- Фильтрации файлов по расширению.
- Рекурсивному поиску в подпапках.
- Преимуществам каждого подхода.
https://realpython.com/get-all-files-in-directory-python/
#python
👉 @python_real
Статья о том, как с помощью Python получать список файлов в директориях. Рассмотрены различные способы, включая использование модулей
os
, os.path
, glob
и более современного pathlib
. Особое внимание уделено:
- Фильтрации файлов по расширению.
- Рекурсивному поиску в подпапках.
- Преимуществам каждого подхода.
https://realpython.com/get-all-files-in-directory-python/
#python
👉 @python_real
👍3
Getters и Setters в Python — это мощный инструмент для управления доступом к атрибутам объекта.
В статье детально рассматривается, как их использовать для инкапсуляции данных и контроля за изменениями свойств объекта.
Основные моменты:
- Объяснение, почему в Python прямой доступ к атрибутам предпочтительнее, но геттеры и сеттеры остаются важными.
- Использование декоратора
- Примеры, как эти механизмы помогают улучшить читаемость и безопасность кода.
https://realpython.com/python-getter-setter/
#python
👉 @python_real
В статье детально рассматривается, как их использовать для инкапсуляции данных и контроля за изменениями свойств объекта.
Основные моменты:
- Объяснение, почему в Python прямой доступ к атрибутам предпочтительнее, но геттеры и сеттеры остаются важными.
- Использование декоратора
@property
для создания свойства с геттером и сеттером. - Примеры, как эти механизмы помогают улучшить читаемость и безопасность кода.
https://realpython.com/python-getter-setter/
#python
👉 @python_real
👍3
28 августа(в четверг) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Python-разработчика.
Как это будет:
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_py_bot
Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Как использовать
Рассматриваются основные аспекты работы с этим файлом, его структура и как он помогает в управлении зависимостями, настройке инструментов и организации проектов.
Краткий обзор:
-
- Позволяет определять сборщики (build backends), такие как
- Упрощает настройку инструментов вроде
- Дает возможность управлять зависимостями и версиями пакетов.
Использование
https://realpython.com/python-pyproject-toml/
#python
👉 @python_real
pyproject.toml
в PythonРассматриваются основные аспекты работы с этим файлом, его структура и как он помогает в управлении зависимостями, настройке инструментов и организации проектов.
Краткий обзор:
-
pyproject.toml
появился в PEP 518 и стал стандартом для описания конфигурации Python-проектов.- Позволяет определять сборщики (build backends), такие как
setuptools
или poetry
.- Упрощает настройку инструментов вроде
black
, mypy
и pytest
.- Дает возможность управлять зависимостями и версиями пакетов.
Использование
pyproject.toml
делает проекты более структурированными и гибкими, особенно при работе с различными инструментами и системами сборки.https://realpython.com/python-pyproject-toml/
#python
👉 @python_real
👍2
🚀 Вышла интересная статья о сравнении UV и pip - двух инструментов для управления зависимостями в Python.
pip - стандартный пакетный менеджер Python, который знаком каждому разработчику. Работает стабильно, но не отличается высокой скоростью.
UV - современная альтернатива от Astral (разработчиков Ruff). Его главная фишка - невероятная скорость. Он значительно быстрее pip и poetry благодаря продуманной архитектуре и кэшу.
В статье разбираются:
- ключевые различия в работе с зависимостями;
- производительность и удобство использования;
- примеры установки пакетов и сборки окружения;
- сценарии, где UV может полностью заменить pip.
Если вы часто работаете с Python-проектами и хотите ускорить установку библиотек, стоит присмотреться к UV.
https://realpython.com/uv-vs-pip/
#python
👉 @python_real
pip - стандартный пакетный менеджер Python, который знаком каждому разработчику. Работает стабильно, но не отличается высокой скоростью.
UV - современная альтернатива от Astral (разработчиков Ruff). Его главная фишка - невероятная скорость. Он значительно быстрее pip и poetry благодаря продуманной архитектуре и кэшу.
В статье разбираются:
- ключевые различия в работе с зависимостями;
- производительность и удобство использования;
- примеры установки пакетов и сборки окружения;
- сценарии, где UV может полностью заменить pip.
Если вы часто работаете с Python-проектами и хотите ускорить установку библиотек, стоит присмотреться к UV.
https://realpython.com/uv-vs-pip/
#python
👉 @python_real
👍3
11 сентября (уже в четверг!) в 19:00 по мск приходи на прямой эфир с реальным собеседованием на Middle разработчика.
Почему точно нужно прийти:
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Python-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
В Python стрелки (
Пример:
Здесь:
*
*
Можно использовать любые типы из модуля
Аннотации никак не влияют на исполнение кода, это всего лишь type hints.
https://realpython.com/what-does-arrow-mean-in-python/
#python
👉 @python_real
->
) используются в аннотациях функций для указания возвращаемого типа. Это не строгая проверка типов, а лишь подсказка для разработчиков и инструментов (например, mypy, IDE).Пример:
def greet(name: str) -> str:
return "Hello, " + name
Здесь:
*
name: str
— аргумент name
должен быть строкой.*
-> str
— функция возвращает строку.Можно использовать любые типы из модуля
typing
или collections.abc
, например:
from typing import List, Dict, Optional
def get_users() -> List[str]:
return ["Alice", "Bob"]
def find_user(user_id: int) -> Optional[Dict[str, str]]:
if user_id == 1:
return {"name": "Alice"}
return None
Аннотации никак не влияют на исполнение кода, это всего лишь type hints.
https://realpython.com/what-does-arrow-mean-in-python/
#python
👉 @python_real
👍4
🚀 FastAPI - современный асинхронный веб-фреймворк на Python, который позволяет создавать быстрые и удобные API.
Статья от Real Python даёт отличное введение в работу с FastAPI: от установки и запуска первого приложения до обработки запросов и валидации данных с помощью Pydantic. Разбираются основы маршрутизации, использование Swagger UI для документации и преимущества асинхронности.
Если вы хотите быстро стартовать с созданием API на Python, этот гайд - отличный первый шаг.
https://realpython.com/get-started-with-fastapi/
#python
👉 @python_real
Статья от Real Python даёт отличное введение в работу с FastAPI: от установки и запуска первого приложения до обработки запросов и валидации данных с помощью Pydantic. Разбираются основы маршрутизации, использование Swagger UI для документации и преимущества асинхронности.
Если вы хотите быстро стартовать с созданием API на Python, этот гайд - отличный первый шаг.
https://realpython.com/get-started-with-fastapi/
#python
👉 @python_real
👍1
25 сентября(в четверг) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Python-разработчика.
Как это будет:
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Python-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_py_bot
Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
268: Advice on Beginning to Learn Python
The Real Python Podcast
Episode 268: Advice on Beginning to Learn Python
Что изменилось в обучении Python за последние несколько лет? Какие новые подходы и обновлённые советы стоит знать новичкам, начинающим свой путь в программировании? На этой неделе в подкасте Стивен Группетта и Мартин Брёус вновь обсуждают, как начать изучать Python.
Мы делимся методами поиска мотивации, построения собственных проектов и освоения основ языка. Даём советы по установке Python и объясняем, почему не стоит зацикливаться на выборе «идеального» редактора. Также рассматриваем, как использовать большие языковые модели (LLM) в процессе обучения программированию и практиковаться в умении задавать хорошие вопросы.
Topics:
00:00:00 – Introduction
00:02:36 – Martin’s teaching background
00:02:57 – Stephen’s teaching background
00:04:07 – Having a vested interest in learning
00:08:35 – No shortcut to learning the fundamentals
00:09:21 – Parallels to learning a foreign language
00:12:43 – What’s different about starting to learn Python now?
00:15:03 – Stephen’s journey to coaching and using LLMs
00:16:20 – Are LLMs helpful for learning?
00:18:50 – Teaching what you’ve learned to someone else
00:19:38 – Learning how to ask good questions
00:22:11 – Improved error messages
00:24:35 – REPL: Read Evaluate Print Loop
00:26:33 – Video Course Spotlight
00:27:48 – Installing Python and choosing an editor
00:35:16 – Considering the scale of beginner projects
00:37:39 – Should a beginner be concerned with making Pythonic code?
00:40:55 – Using LLM tools and defining your level of skill
00:42:39 – Python for Beginners: Code With Confidence - live course
00:47:32 – Looking at projects - Awesome Python
00:48:02 – Asking an LLM to explain the code generated
00:50:46 – Debuggers and seeing code run
00:51:23 – Thanks and goodbye
https://realpython.com/podcasts/rpp/268/
#python
👉 @python_real
Что изменилось в обучении Python за последние несколько лет? Какие новые подходы и обновлённые советы стоит знать новичкам, начинающим свой путь в программировании? На этой неделе в подкасте Стивен Группетта и Мартин Брёус вновь обсуждают, как начать изучать Python.
Мы делимся методами поиска мотивации, построения собственных проектов и освоения основ языка. Даём советы по установке Python и объясняем, почему не стоит зацикливаться на выборе «идеального» редактора. Также рассматриваем, как использовать большие языковые модели (LLM) в процессе обучения программированию и практиковаться в умении задавать хорошие вопросы.
Topics:
00:00:00 – Introduction
00:02:36 – Martin’s teaching background
00:02:57 – Stephen’s teaching background
00:04:07 – Having a vested interest in learning
00:08:35 – No shortcut to learning the fundamentals
00:09:21 – Parallels to learning a foreign language
00:12:43 – What’s different about starting to learn Python now?
00:15:03 – Stephen’s journey to coaching and using LLMs
00:16:20 – Are LLMs helpful for learning?
00:18:50 – Teaching what you’ve learned to someone else
00:19:38 – Learning how to ask good questions
00:22:11 – Improved error messages
00:24:35 – REPL: Read Evaluate Print Loop
00:26:33 – Video Course Spotlight
00:27:48 – Installing Python and choosing an editor
00:35:16 – Considering the scale of beginner projects
00:37:39 – Should a beginner be concerned with making Pythonic code?
00:40:55 – Using LLM tools and defining your level of skill
00:42:39 – Python for Beginners: Code With Confidence - live course
00:47:32 – Looking at projects - Awesome Python
00:48:02 – Asking an LLM to explain the code generated
00:50:46 – Debuggers and seeing code run
00:51:23 – Thanks and goodbye
https://realpython.com/podcasts/rpp/268/
#python
👉 @python_real
👍1
9 октября(в четверг) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Python-разработчика.
Как это будет:
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Python-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_py_bot
Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM