

- Главная
- Каталог
- Интернет технологии
- Zen of Python
Статистика канала
Полная статистикаchevron_rightpip install pygitzen.
Что даёт: навигация по коммитам, просмотр diff, панель статусов файлов в стиле VSCode, ветко‑зависимая история и индикаторы «пушнуто/локально» без вызова системного git.
Зачем: когда в окружении нельзя ставить ничего кроме Python‑пакетов, нужен «чисто Python» инструмент для Git с удобной навигацией и минимумом интеграций.
Автор просит фидбек по недостающим функциям и удобству UI, так что можете отписаться в репозитории. Вам плюсик в карму, автор порадуется.
Проект, послуживший вдохновением: https://github.com/jesseduffield/lazygit
Ну и, конечно, кто-то написал аналог на Rust, чтобы было ультра-быстро, а скорее просто потому что может: https://github.com/gitui-org/gitui
Как вам такие поделки? Как минимум романтично же, консольные клиенты как будто пахнут старыми добрыми временами, вы не находите?
@zen_of_pythonos.stat и datetime писать так:
query = Query(
where_expr=(AgeDays() > 7) & (Size() > "10 mb") & Suffix(".log"),
from_paths="C:/logs",
threaded=True
)
result_set = query.select(){}
Т.е. найти логи старше 7 дней и больше 10 МБ.
Выглядит удобно, но как-то не очень pythonic, вам не кажется? Как будто если делаешь что-то SQL-like, то лучше напрямую SQL и взять, а не изобретать мини-язык внутри Python. И это как раз самое интересное — в комментах начали предлагать как можно сделать лучше.
Например, вот так:
query(lambda p: p.age_days < 7 and p.size > 10_000_000 and p.suffix == ".log"){}
Добавить обёртку, которая будет вычислять необходимые свойства по запросу с использованием cached_property и получим по сути то же самое, но проще.
Или использовать модуль ast и такой синтаксис:
query("age_days < 7 and size > 10_000_000 and suffix == '.log'"){}
А может вообще что-то lisp-подобное:
query(("and", ("age_days", ">", 7),
("size", ">", 10_000_000),
("suffix", "==", ".log"))){}
Или добавить callable-объекты, которые можно передавать в фильтры, получится куда более нативно:
dir = pathlib.Path('/var')
for file in filter(OlderThan(days=7) & LargerThan(MB=10),dir.rglob("*")):
print(file.as_posix()){}
Лично мне, админу канала @zen_of_python, последний вариант кажется самым удобным. Не самый привычный синтаксис, но читается однозначно. И возможность задавать время и размер файлов в привычных единицах — тоже плюс.
Если для ускорения добавить конкурентность и кэширование, как сделал автор исходной библиотеки, то получится прекрасный инструмент.
А какой стиль вам больше понравился? Как бы вы реализовали?super(): как это работает
Сегодня мы разберём одно из ключевых понятий объектно-ориентированного программирования в Python — super(). Когда мы работаем с наследованием, то порой сталкиваемся с дублированием кода:
class Employee:
def __init__(self, name, salary):
self.name = name
self.salary = salary
def raise_salary(self, amount):
self.salary += amount
class Manager(Employee):
def __init__(self, name, salary, department):
self.name = name
self.salary = salary
self.department = department
{}
На первый взгляд, всё верно. Но посмотрите внимательно — часть кода в Manager.__init__ дублирует логику базового класса Employee. В больших проектах уследить за всеми такими повторениями становится трудоемко. Решение простое — использовать super():
class Manager(Employee):
def __init__(self, name, salary, department):
super().__init__(name, salary)
self.department = department
{}
Теперь Manager вызывает конструктор базового класса Employee, а значит:
super() — это функция. На самом деле это класс. При его вызове возвращается прокси-объект, который даёт доступ к методам родительского класса. То есть строка:
super().__init__(name, salary)
{}
означает:
«Возьми ближайший родительский класс в иерархии и вызови его метод `__init__()`».Что важно помнить
super() работает не только в __init__. Его можно использовать в любых методах, которые переопределяются в подклассе;
super() без аргументов — контекст определяется автоматически;
super() работает через механизм Method Resolution Order (MRO). Это гарантирует, что каждый базовый класс вызывается ровно один раз.
#основы
@zen_of_pythonОтзывы канала
Каталог Телеграм-каналов для нативных размещений
Zen of Python — это Telegam канал в категории «Интернет технологии», который предлагает эффективные форматы для размещения рекламных постов в Телеграмме. Количество подписчиков канала в 20.1K и качественный контент помогают брендам привлекать внимание аудитории и увеличивать охват. Рейтинг канала составляет 2.3, количество отзывов – 0, со средней оценкой 0.0.
Вы можете запустить рекламную кампанию через сервис Telega.in, выбрав удобный формат размещения. Платформа обеспечивает прозрачные условия сотрудничества и предоставляет детальную аналитику. Стоимость размещения составляет 25174.8 ₽, а за 11 выполненных заявок канал зарекомендовал себя как надежный партнер для рекламы в TG. Размещайте интеграции уже сегодня и привлекайте новых клиентов вместе с Telega.in!
Вы снова сможете добавить каналы в корзину из каталога
Комментарий