sh1nkey

sh1nkey

Кто я? На этот вопрос можно ответить по разному. Для начала, я - Шинкей. А ещё я программист: -работаю python-разработчиком в procollab.ru -нынешний стаж - год. и будет больше :} Вот ссылка на мой ТГ канал. Пишите, не стесняйтесь :} https://t.me/sh1nke9
Пикабушник
4147 рейтинг 4 подписчика 0 подписок 23 поста 2 в горячем
Награды:
Сосисочных дел мастер
0

Да, интерфейс и абстрактный класс - это разные вещи

В Python их можно реализовать одним и тем же способом, но цели у них разные

Интерфейс - это то, что должен делать класс, который реализует заданный интерфейс . Он содержит только публичные методы

Абстрактный класс - это то, как будет работать класс, который будет наследоваться от абстрактного класса. Т.е. в абстрактном классе могут быть и защищенные методы, и публичные

3

На рабочем ПК перешёл на VSCode и установил на него BasedPyright

я очень. очень. очень удивлён

это расширение, вшитое в IDE, умеет:

- указывает на устаревшие конструкции языка

- указывает на неправильный порядок импортов

- указывает, какие функции надо пометить как @override

- АВТОМАТИЧЕСКИ ПОКАЗЫВАЕТ ТАЙПХИНТЫ (на слое IDE. не на слое кода)

Но всегда я использовать это не буду. У меня ушёл час-два на фикс кучи-кучи мелких недочётов. код становится чище и понятнее, но недочётов слишком дохуя, так что это жрёт много лишнего времени. Если скучно и хочется порефакторить - рекомендую. Я буду включать это периодически

5

Вопрос про типы данных в Python, который меня сломал

Любой джун может сказать, что типы данных делятся на изменяемые и неизменяемые. Но 95% джунов на этот вопрос ответить не смогут:

"Почему если засунуть инстанс обычного класса (без переопределённых дандер методов) в ключ словаря, то он успешно захэшируется, если инстанс класса является изменяемым?"

Потому что этот вопрос требует знаний:

- что такое хэш

- что такое id

- как связаны дандеры eq и hash

- откуда у объектов по дефолту берутся дандер методы

- как эти дандеры работают

Итак...

Объекты в Python фундаментально можно сравнивать по значению, и по уникальности в памяти.

Что такое хэш

Это мера выражения значения объекта

Что такое id

Это мера выражения уникальности объекта в памяти

Как связаны дандеры eq и hash

Так как мы обычно сравниваем объекты именно по значению, то у нас дандер методы eq и hash взаимосвязаны, потому что hash - это получение значения, а eq - это сравнение значения. То есть при переопределении метода hash нам надо обязательно переопределять eq

Откуда у объектов по дефолту берутся дандер методы

Все объекты по дефолту наследуются от object. Object содержит свои реализации dunder-методов

Как эти дандеры работают

По дефолту, hash возвращает id объекта (адрес в памяти). Именно поэтому инстанс класса можно засунуть в ключ словаря

Показать полностью

Почему TDD актуально в Python

Python даёт программисту минимум гарантий, что данный ему код будет работать.

Почему? Потому что:

- этот язык интерпретируемый (нет компиляции, нет проверки всего кода перед запуском. то есть мы не можем сказать: "it compiled, so it likely works")

- он имеет динамическую типизацию (программа не поломается сразу, если мы подадим в нее не тот тип)

Но как бы в этом сила Python: он хорош для прототипирования, и позволяет не ебаться с кодом до идеала, как того требует, например, компилятор Rust

Поэтому в Python юнит-тестирование и использование статических анализаторов кода особенно актуально. Это та жертва, на которую нужно пойти, если хотите получить дополнительный гарант функционирования вашей программы


Ссылка на оригинальный пост:

https://t.me/sh1nke9/384

Показать полностью
1

Кратко про Test Driven Development (TDD). Плюсы и минусы

Test Driven Development (TDD)- она же "разработка через тестирование" - это методология разработки, согласно которой при написании кода сначала пишешь проваливающийся авто-тест, потом только код, и делаешь код до тех пор, пока авто-тест не заработает.

3 этапа:

1. красный = написание проваливающегося авто-теста

2. зелёный = написание кода, чтоб тест не проваливался

3. рефакторинг = устранение дублирования и оптимизация кода

Мне такая задумка нравится, потому что:

+ TDD в некоторой степени гарантирует работоспособность программы

+ интереснее, чем мануально протыкивать swagger

+ меньше времени в будущем на манульное тестирование

+ если не доделал функционал - тест напомнит тебе его доделать

+ не нужно перепроверять работу за другими разработчиками, фронтендерам ненужно ждать фиксы первичных багов


Минусы:

- больше времени тратить на написание кода

- если писать тесты плохо, они только сделают всё хуже


Я предлагаю такие правила TDD:

- тесты делать минималистичными и простыми

- тестировать только корректный вывод результата (не тестировать пограничные случаи ошибки)

- не писать тесты, которые не могут провалиться, и не писать тесты для состояний, которые не могут произойти

- писать тесты только для главной тестируемой функции (если говорить на языке веба, писать тесты только для endpoint-ов, или же вьюх). для этого нам понадобится DI (dependency injection)

Этим мы добьёмся следующего:

- минимум времени на бесполезные тесты

- находим баланс между тратой времени на написание тестов, их пользой, и количеством покрываемого функционала

- не нарушаем архитектуру приложения, не импортируем в файл с тестами непубличные функции



Оригинальный пост:
https://t.me/sh1nke9/379

Показать полностью
1

Авто-создание резюме с красивым шаблоном бесплатно

Зацените, какая новая фишка у нас на проекте появилась (не реклама, мне не платили)

можно натыкать себе навыки в профиль, опыт работы, тыкнуть на кнопку, и резюме автоматически составиться (навыков много, как айтишных, так и гуманитарных)

такая красотища :0

Вот пример:

пример шаблона

пример шаблона

если хотите попробовать, вот ссылка:

app.procollab.ru

Показать полностью 1
9

Хороший пре-коммит хук для Python разработчиков

Что такое pre-commit hook? Возможность автоматически проверять код перед коммитом. Может быть разное: прогонять тесты, линтеры, форматтеры...

И я собрал для вас быстрый набор из прекоммит хуков, которые вы можете использовать на любых проектах.

Что в него входит:

- ruff (быстрейший форматтер, делает код красивым)

- pyright (один из быстрейших статических анализаторов кода на Python, посвечивает ошибки в тайп-хинтах. что-то типа проверки типов при компиляции)

- pytest с расширением doctest (прогоняет имеющиеся юнит тесты вместе с тестами в документации, про которые я писал ранее. я еле как нашёл пре коммит хук для этого...)

Как установить?

1. сначала

pip install pre-commit

2. потом создаётё .pre-commit-config.yaml

3. потом вставляете туда

repos:

- repo: https://github.com/astral-sh/ruff-pre-commit

rev: v0.1.5

hooks:

- id: ruff

args: [ --fix, --exit-non-zero-on-fix, --show-fixes ]

- id: ruff-format

- repo: local

hooks:

- id: pytest

args: [ --doctest-modules ]

name: pytest

entry: pytest .

language: system

types: [python]

pass_filenames: false

always_run: true

- repo: https://github.com/RobertCraigie/pyright-python

rev: v1.1.385

hooks:

- id: pyright

4. пишете

pre-commit install

Энджой :)

Ссылка на оригинальный пост:
https://t.me/sh1nke9/375

Показать полностью
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества