Zen of Python
Полный Дзен Пайтона в одном канале Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Сайт: https://tprg.ru/site Регистрация в перечне РКН: https://tprg.ru/xZOL
Показати більше📈 Аналітичний огляд Telegram-каналу Zen of Python
Канал Zen of Python (@zen_of_python) у мовному сегменті Російська є активним учасником. На даний момент спільнота об'єднує 18 714 підписників, посідаючи 7 010 місце в категорії Технології та додатки та 35 227 місце у регіоні Росія.
📊 Показники аудиторії та динаміка
З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 18 714 підписників.
За останніми даними від 28 жовтня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на -100, а за останні 24 години на -10, загальне охоплення залишається високим.
- Статус верифікації: Не верифікований
- Рівень залученості (ER): Середній показник залученості аудиторії становить 6.22%. Протягом перших 24 годин після публікації контент зазвичай збирає 4.24% реакцій від загальної кількості підписників.
- Охоплення публікацій: В середньому кожен допис отримує 1 165 переглядів. Протягом першої доби публікація в середньому набирає 793 переглядів.
- Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 1.
- Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як github, rust, pip, api, install.
📝 Опис та контентна політика
Автор описує ресурс як майданчик для висловлення суб'єктивної думки:
“Полный Дзен Пайтона в одном канале
Разместить рекламу: @tproger_sales_bot
Правила общения: https://tprg.ru/rules
Другие каналы: @tproger_channels
Сайт: https://tprg.ru/site
Регистрация в перечне РКН: https://tprg.ru/xZOL”
Завдяки високій частоті оновлень (останні дані отримано 29 жовтня, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Технології та додатки.
class XMLImporter:
def __init__(self, filename):
self.filename = filename
def execute(self):
print("XML imported from", self.filename)
class JSONImporter:
def __init__(self, filename):
self.filename = filename
def execute(self):
print("JSON imported from", self.filename)
class Document:
def import_file(self, filename):
if filename.endswith(".xml"):
importer = XMLImporter(filename)
elif filename.endswith(".json"):
importer = JSONImporter(filename)
data = importer.execute()
document = Document()
document.import_file("text.xml")
document.import_file("text.json")
На первый взгляд код рабочий, но здесь нарушаются два принципа SOLID:
1️⃣ Принцип единственной ответственности (Single Responsibility Principle): класс Document отвечает сразу за две вещи:
🔘 создание объектов XMLImporter, JSONImporter;
🔘 их использование.
2️⃣ Принцип открытости/закрытости (Open / Closed Principle).
Если появится новый формат (например, CSV), придётся снова лезть в метод import_file и расширять блок if / elif.
Решение: фабрика
Чтобы убрать ответственность за создание объектов из класса Document, вводится так называемася фабрика.
class ImporterFactory:
def get_importer(self, filename):
if filename.endswith(".xml"):
return XMLImporter(filename)
elif filename.endswith(".json"):
return JSONImporter(filename)
Теперь Document больше не знает, как именно создаются нужные классы. Ему просто передают готовую фабрику:
class Document:
def __init__(self, factory):
self.factory = factory
def import_file(self, filename):
importer = self.factory.get_importer(filename)
data = importer.execute()
factory = ImporterFactory()
document = Document(factory)
document.import_file("text.xml")
document.import_file("text.json")
Преимущества фабрики
1️⃣ Изоляция ответственности: логика создания объектов теперь сосредоточена только в одном месте — в ImporterFactory.
2️⃣ Гибкость: если нужно добавить поддержку нового формата (CSV, YAML и т.д.), достаточно изменить фабрику, не трогая Document.
3️⃣ Удобное тестирование: в тестах можно подменить фабрику на «фиктивную» (mock) и проверять работу Document независимо от импортеров.
Что дальше?
Фабрика — это базовый паттерн. На его основе строятся более сложные подходы, например:
🔘 Factory Method — когда создание объектов делегируется подклассам.
🔘 Abstract Factory — когда фабрика создаёт целые семейства объектов, согласованных между собой.
#основыself: простейшее объяснение
Если вы только начинаете изучать Python, то почти наверняка уже столкнулись с self. В этом лонгриде мы разберемся, что это и с чем это едят.
self — это ссылка на объект
Ключевое слово self используется в методах классов. Оно всегда указывает на текущий экземпляр класса, через который происходит обращение к данным и методам.
class Employee:
def set_salary(self, value):
self.salary = value
e = Employee()
e.set_salary(2000)
print(e.salary)
Когда вы создаёте объект, Python автоматически передаёт этот объект первым аргументом в метод. Принято называть его self, хотя технически вы можете использовать любое имя.
🔘 Создаётся класс Employee с методом set_salary. Этот метод принимает два аргумента:
— self — сам объект;
— value — значение, которое мы хотим установить.
🔘 Внутри метода выполняется присваивание:
self.salary = value
Это значит, что у конкретного объекта e создаётся атрибут salary, которому присваивается переданное значение.
🔘 Далее создаём объект:
e = Employee()
🔘 Устанавливаем зарплату:
e.set_salary(2000)
На самом деле Python преобразует этот вызов в:
Employee.set_salary(e, 2000)
🔘 Проверяем результат:
print(e.salary) # 2000
Почему без self не обойтись?
self позволяет объекту хранить собственные данные. Каждый экземпляр класса имеет свой набор атрибутов, и именно через self мы к ним обращаемся.
Например, если создать двух сотрудников:
e1 = Employee()
e2 = Employee()
e1.set_salary(2000)
e2.set_salary(3000)
print(e1.salary) # 2000
print(e2.salary) # 3000
У каждого объекта будет своя зарплата.
#инструмент
@zen_of_pythoncruft update, чтобы подтягивать изменения из шаблона по мере его развития. Инструмент умеет проверять, актуален ли проект относительно шаблона, и позволяет автоматически применять обновления через CI-конвейеры. Это отличный способ избежать дублирования кода и облегчить поддержку множества проектов, основанных на одном шаблоне.
#инструмент
@zen_of_python
def count_titles(titles: list[str]) -> int:
return len(titles)
Здесь -> int говорит: «ожидается, что функция вернёт int». Аннотации опциональны и сами по себе ничего в рантайме не проверяют — это метаданные.
Краткая история оператора
Идея аннотаций функций впервые появилась в PEP 3107 (Function Annotations), который ввёл возможность добавлять произвольные метаданные к параметрам и к возвращаемому значению. На базе этой синтаксики PEP 484 затем ввёл систему типовых подсказок (type hints) для Python, сделав их стандартной практикой для тех, кто хочет статической проверки типов. Все эти дополнения остались опциональными — сам интерпретатор не будет выбрасывать ошибки, если аннотации не совпадают с фактическим типом во время выполнения.
Простой пример:
import random
def get_game_recommendation(titles: list[str]) -> str:
return random.choice(titles)
games = ["Minecraft", "Cyberpunk 2077", "The Witcher 3", "Elden Ring"]
recommendation = get_game_recommendation(games)
print(f"Рекомендуемая игра: {recommendation}") # Например, Minecraft
print(f"Тип возвращаемого значения: {type(recommendation).__name__}") # str
Что происходит, если функция возвращает другой тип?
Python сам по себе не будет проверять, совпадает ли реальный возвращаемый тип с аннотацией — код просто выполнится. Но когда вы используете статический анализатор типов (например, mypy) или линтер, несоответствие будет обнаружено и выведет предупреждение / ошибку. Это ключевая идея: аннотации дают выгоду при статической проверке, CI и чтении кода, но не изменяют семантику программы во время выполнения.
Какие типы можно указывать после ->?
Почти любые:
🔘 простые встроенные (int, str, bool),
🔘 коллекции (list[str], dict[str, int]),
🔘 собственные классы и проч.
Где ещё применяются стрелки и аннотации?
Хотя наиболее часто -> встречается в объявлениях функций, аннотации — это часть более широкой системы типизации в Python. Типы используются для:
🔘 аннотаций параметров функций;
🔘 переменных и атрибутов классов (PEP 526);
🔘 аннотаций методов, Callable, Protocol и т.д.;
🔘 документации и автодополнения в IDE.
Инструменты типа mypy, pyright, IDE (PyCharm, VS Code) и линтеры используют аннотации, чтобы находить ошибки и улучшать подсказки.
Ограничения и подводные камни
🔘 Аннотации не выполняются: они не гарантия корректности в рантайме;
🔘 Сложные типы для сложной структуры данных или динамических конструкций типы могут стать громоздкими; иногда приходится балансировать читабельность и строгость;
#основы
@zen_of_pythonDocker (Контейнеризация) 🔘 Представьте Docker как транспортный контейнер для софта. 🔘 Он упаковывает код, библиотеки и зависимости так, чтобы приложение одинаково работало в любой среде. 🔘 Плюсы: портативность, изоляция и одинаковое поведение в dev-, staging- и production-средах. Kubernetes (Оркестрация) 🔘 Когда контейнеров становится много, нужен управляющий. 🔘 Kubernetes — это как портовая служба, которая управляет контейнерами: масштабирует, перезапускает, балансирует нагрузку. 🔘 Обеспечивает балансировку нагрузки, масштабирование, поэтапные обновления и самовосстановление контейнерных приложений. CI/CD (Непрерывная интеграция и доставка) 🔘 CI — это как проверка каждого продукта перед отправкой с завода: тесты запускаются автоматически при каждом пуше кода. 🔘 CD — это система доставки: одобренные изменения автоматически едут в production. 🔘 Плюсы: более быстрые релизы, меньше багов, проще командная работа. Аналогия 🔘 Docker — Запечатанная коробка с вашим товаром. 🔘 Kubernetes — Логистическая компания, которая организует и доставляет все коробки по назначению. 🔘 CI/CD — Конвейер, на котором коробки непрерывно отправляются дальше без задержек.
datetime, поддерживает:
— Вычисление «следующего X»: удобно находим даты следующего понедельника или последней недели месяца;
— Относительные дельты: вычисляем разницу между двумя датами не только в секундах, но и в понятных календарных единицах (например, «2 месяца и 5 дней»);
— Рекуррентные даты (повторяющиеся события)
Поддерживается генерация серий дат по очень гибким правилам, расширяющим стандарт iCalendar (например: «каждый второй вторник месяца до конца года») и многое другое.
Еще бы русский язык поддерживала, цены бы не было!
#инструмент
@zen_of_python