Истинная природа методов — это «специальные методы».
Про жизненный цикл инстанса.
▪️
Думаю, как конструктор используется очень часто. В основном это инициализация экземпляра (например, инициализация атрибутов). Отличие от
Возвращаемое значение всегда
▪️
В отличие от
Возвращаемое значение должно быть созданным экземпляром (обычно это экземпляр класса из аргумента
Типичное место применения
Ещё
▪️
Вызывается в момент, когда экземпляр уничтожается (например, через
👉 @PythonPortal
Про жизненный цикл инстанса.
__init__object.__init__(self[, ...])Думаю, как конструктор используется очень часто. В основном это инициализация экземпляра (например, инициализация атрибутов). Отличие от
__new__, о котором ниже: __init__ выполняется уже после создания экземпляра.Возвращаемое значение всегда
None.__new__object.__new__(cls[, ...])В отличие от
__init__, выполняется до создания экземпляра и отвечает именно за его создание. Поэтому это не инстанс-метод, а статический метод, но явно прописывать @staticmethod не нужно.Возвращаемое значение должно быть созданным экземпляром (обычно это экземпляр класса из аргумента
cls).Типичное место применения
__new__ это инициализация подклассов, которые наследуются от иммутабельных типов (int, str, tuple и т.д.). Они иммутабельные, поэтому после создания объекта нельзя менять атрибуты через __init__.Ещё
__new__ используют для реализации паттерна Singleton.__del__object.__del__(self)Вызывается в момент, когда экземпляр уничтожается (например, через
del). Явных популярных кейсов немного, но может быть полезно при отладке, чтобы понимать тайминг работы GC.Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍4😢1
This media is not supported in your browser
VIEW IN TELEGRAM
Любой может программировать с помощью ИИ.
Вы используете ИИ без базовых знаний программирования:
👉 @PythonPortal
Вы используете ИИ без базовых знаний программирования:
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥36😁24👍7❤1
This media is not supported in your browser
VIEW IN TELEGRAM
GitHub запустил свою платформу для обучения: все курсы и сертификаты в одном месте.
Git, GitHub, MCP, использование ИИ, VSCode и многое другое.
И большая часть контента бесплатна: → https://learn.github.com
👉 @PythonPortal
Git, GitHub, MCP, использование ИИ, VSCode и многое другое.
И большая часть контента бесплатна: → https://learn.github.com
Please open Telegram to view this post
VIEW IN TELEGRAM
❤34
Сюююда: GitHub-репозиторий, чтобы учиться AI Engineering.
Там собраны одни из лучших бесплатных курсов, статей, туториалов и видео по темам:
Математическая база
Основы AI и ML
Deep Learning и специализации
Generative AI
Большие языковые модели (LLM)
Гайды по prompt engineering
RAG, агенты и MCP
Смотри тут: https://github.com/ashishps1/learn-ai-engineering
👉 @PythonPortal
Там собраны одни из лучших бесплатных курсов, статей, туториалов и видео по темам:
Математическая база
Основы AI и ML
Deep Learning и специализации
Generative AI
Большие языковые модели (LLM)
Гайды по prompt engineering
RAG, агенты и MCP
Смотри тут: https://github.com/ashishps1/learn-ai-engineering
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍4
Изучи Python с Университетом University of Helsinki
✓ С официальным сертификатом
✓ С нуля до продвинутого уровня
✓ 14 частей с практическими заданиями
Весь контент доступен → здесь
👉 @PythonPortal
✓ С официальным сертификатом
✓ С нуля до продвинутого уровня
✓ 14 частей с практическими заданиями
Весь контент доступен → здесь
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19
pip 26.0: pre-release и фильтрация по времени загрузки
Три большие новые фичи:
▪️
▪️
▪️
Куда более подробный пост: читать
Официальный анонс здесь
Полный changelog здесь
👉 @PythonPortal
Три большие новые фичи:
--all-releases <package> и --only-final <package>: контроль pre-release по каждому пакету отдельно, плюс возможность отключить все pre-release пакеты через --only-final :all:--uploaded-prior-to <timstamp>: можно ограничить по времени загрузки пакета, например --uploaded-prior-to "2026-01-01T00:00:00Z"--requirements-from-script <script>: установка зависимостей, объявленных в inline metadata скрипта (PEP 723)Куда более подробный пост: читать
Официальный анонс здесь
Полный changelog здесь
Please open Telegram to view this post
VIEW IN TELEGRAM
Richard Si
What's new in pip 26.0 - prerelease and upload-time filtering!
pip 26.0 includes support for reading requirements from inline script metadata, excluding distributions by upload time, per-package prerelease selection, and experimental support for in-process build dependencies.
❤10🔥6😢1
Please open Telegram to view this post
VIEW IN TELEGRAM
❤20🤔2👍1🔥1
Вот частое заблуждение про RAG
Когда говорят про RAG, обычно думают так: проиндексировали док → потом достали этот же док.
Но индексация ≠ ретривал.
То есть данные, которые ты индексируешь, не обязаны совпадать с теми данными, которые ты потом скармливаешь LLM на этапе генерации.
Вот 4 умных способа индексировать данные:
1) Chunk Indexing
▪️ Самый распространенный подход.
▪️ Режешь документ на чанки, строишь эмбеддинги и кладешь их в векторную базу.
▪️ Во время запроса просто достаешь ближайшие чанки.
Подход простой и рабочий, но большие или шумные чанки могут просаживать точность.
2) Sub-chunk Indexing
▪️ Берешь исходные чанки и дробишь их еще мельче на сабчанки.
▪️ Индексируешь уже эти более мелкие куски.
▪️ Но при выдаче все равно возвращаешь “большой” чанк для контекста.
Помогает, когда в одном абзаце/секции намешано несколько разных идей: шанс точно сматчиться с запросом выше.
3) Query Indexing
▪️ Вместо сырого текста генеришь гипотетические вопросы, на которые, по мнению LLM, этот чанк может ответить.
▪️ Эмбеддишь эти вопросы и сохраняешь.
▪️ При ретривале реальные пользовательские запросы обычно лучше ложатся на такие “вопросные” представления.
▪️ Похожая идея есть в HyDE, только там матчат гипотетический ответ с реальными чанками.
Кайфово для QA-систем, потому что уменьшает семантический разрыв между запросом пользователя и тем, что лежит в индексе.
4) Summary Indexing
▪️ Просишь LLM кратко резюмировать каждый чанк в компактную семантическую форму.
▪️ Индексируешь summary вместо исходного текста.
▪️ А возвращаешь все равно полный чанк для контекста.
Особенно эффективно для плотных или структурированных данных (типа CSV/таблиц), где эмбеддинги сырого текста часто слабо что-то выражают
👉 @PythonPortal
Когда говорят про RAG, обычно думают так: проиндексировали док → потом достали этот же док.
Но индексация ≠ ретривал.
То есть данные, которые ты индексируешь, не обязаны совпадать с теми данными, которые ты потом скармливаешь LLM на этапе генерации.
Вот 4 умных способа индексировать данные:
1) Chunk Indexing
Подход простой и рабочий, но большие или шумные чанки могут просаживать точность.
2) Sub-chunk Indexing
Помогает, когда в одном абзаце/секции намешано несколько разных идей: шанс точно сматчиться с запросом выше.
3) Query Indexing
Кайфово для QA-систем, потому что уменьшает семантический разрыв между запросом пользователя и тем, что лежит в индексе.
4) Summary Indexing
Особенно эффективно для плотных или структурированных данных (типа CSV/таблиц), где эмбеддинги сырого текста часто слабо что-то выражают
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13
Вот полный путь, который я бы рекомендовал, чтобы в этом году собрать production-grade AI-агентов:
▪️ база по Python и алгоритмам
▪️ математика и основы ML
▪️ трансформеры и LLM
▪️ prompt engineering
▪️ memory и RAG
▪️ tools и интеграции
▪️ фреймворки типа LangChain или CrewAI
▪️ multi-agent системы
▪️ тестирование, деплой, безопасность
👉 @PythonPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
😁12❤5🤣5👍3
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7
Большой Python-грех: использовать изменяемый объект как аргумент по умолчанию
Не используй изменяемые объекты в качестве значений по умолчанию. В Python значения аргументов по умолчанию вычисляются один раз, в момент определения функции, а не при каждом ее вызове.
Если у тебя аргумент по умолчанию выглядит так:
Лучший вариант: ставить неизменяемый объект в значение по умолчанию. Тогда каждый вызов будет получать новый список, как в примере
👉 @PythonPortal
Не используй изменяемые объекты в качестве значений по умолчанию. В Python значения аргументов по умолчанию вычисляются один раз, в момент определения функции, а не при каждом ее вызове.
Если у тебя аргумент по умолчанию выглядит так:
items=[], этот список будет общим для всех вызовов, и ты получишь накапливающееся состояние, которого не планировал.Лучший вариант: ставить неизменяемый объект в значение по умолчанию. Тогда каждый вызов будет получать новый список, как в примере
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11❤7😁4👍1