Абстрактные классы и методы
В абстрактном классе обычно реализуется общая часть нескольких сущностей или другими словами – абстрактная сущность.
Абстрактный метод – это метод, который не имеет своей реализации в базовом классе, и он должен быть реализован в классе-наследнике.
Для того, чтобы создать абстрактный класс с абстрактными методами, надо импортировать вспомогательные метакласс
Если мы отнаследуем новый класс от абстрактного класса, не переопределив абстрактные методы, в данном случае
Для того, чтобы код заработал корректно, нам необходимо переопределить все абстрактные методы. То есть по сути еще раз просто написать метод, но уже в новом классе.
UPD. В коде опечатка, в классе
#классы #метаклассы #abc
В абстрактном классе обычно реализуется общая часть нескольких сущностей или другими словами – абстрактная сущность.
Абстрактный метод – это метод, который не имеет своей реализации в базовом классе, и он должен быть реализован в классе-наследнике.
Для того, чтобы создать абстрактный класс с абстрактными методами, надо импортировать вспомогательные метакласс
ABCMeta
и декоратор abstractmethod
из модуля abc
.Если мы отнаследуем новый класс от абстрактного класса, не переопределив абстрактные методы, в данном случае
method
, и попробуем создать экземпляр, то получим исключение TypeError
.Для того, чтобы код заработал корректно, нам необходимо переопределить все абстрактные методы. То есть по сути еще раз просто написать метод, но уже в новом классе.
UPD. В коде опечатка, в классе
GoodExample
метод должен называться method
, а не function
.#классы #метаклассы #abc
Упрощение создания операторов сравнения
Для создания объектов с поддержкой операторов сравнения в классе обычно требуется реализовать большое количество магических методов, а именно –
Про то, что делает каждый из них расскажем отдельным постом, но сейчас покажем, как можно сильно упростить реализацию подобного класса. Для этого можно использовать декоратор
В таком случае достаточно реализовать в классе только
#классы
Для создания объектов с поддержкой операторов сравнения в классе обычно требуется реализовать большое количество магических методов, а именно –
__lt__
, __le__
, __eq__
, __ne__
, __gt__
, __ge__
.Про то, что делает каждый из них расскажем отдельным постом, но сейчас покажем, как можно сильно упростить реализацию подобного класса. Для этого можно использовать декоратор
total_ordering
из пакета functools
.В таком случае достаточно реализовать в классе только
__lt__
и __eq__
. Эти два метода являются минимумом, который нужен декоратору для конструирования остальных методов.#классы
Перегрузка операторов сравнения
В случае, если вам в коде необходимо сравнивать объекты какого-либо класса, требуется реализовать магические методы, которые вызываются при сравнении.
Например, под капотом записи
Писать все шесть методов получается слегка громоздко, поэтому зачастую используют декоратор
#классы
В случае, если вам в коде необходимо сравнивать объекты какого-либо класса, требуется реализовать магические методы, которые вызываются при сравнении.
Например, под капотом записи
a < b
вызывается a.__lt__(b)
. Для каждого оператора сравнения существует свой магический метод. Подробнее про то, какой метод за какой оператор отвечает, выше в коде. Писать все шесть методов получается слегка громоздко, поэтому зачастую используют декоратор
total_ordering
из functools
. Про него, кстати, недавно писали пост. #классы
Список импортов по умолчанию
Для ограничения импорта переменных, функций и классов по умолчанию можно использовать список
Таким образом, при импорте вида
Тем не менее, в примере выше импортировать функцию
#модули
Для ограничения импорта переменных, функций и классов по умолчанию можно использовать список
__all__
, в который записываются названия объектов, которые будут подключены.Таким образом, при импорте вида
from module import *
из модуля c подобной записью подключатся только объекты с названиями из списка __all__
.Тем не менее, в примере выше импортировать функцию
foo
из такого модуля всё ещё можно, например, с помощью записи from module import foo
.#модули
Weekend Offer для ML- и RecSys-разработчиков
Команда ВКонтакте хочет найти Data Scientists, RecSys Developers и ML Developers. Они приглашают специалистов в команды VK Клипы и VK Видео, Сообществ, Рекомендаций и развития сервисов и Core ML. Там, вместе с другими талантами, вы будете разрабатывать рекомендательные системы для двух крупнейших российских видеосервисов.
Команда рекомендаций и развития сервисов не просто помогает пользователям найти релевантный контент - они исследуем новые, ранее неизвестные предпочтения людей и помогаем авторам контента найти свою аудиторию. Команда сообщества занимается разными задачами - с сурового хайлоадного бэкенда с продуманными ML-алгоритмами и заканчивая креативными продуктовыми экспериментами. Команда Core ML занимается умным ранжированием ленты и подбором интересных публикаций, а также - многими другими направлениями.
20 июня — 1 июля состоится первая встреча, с вами свяжутся и договорятся о звонке, будет короткий ликбез о командах и выбор слота для индивидуального онлайн-интервью.
В субботу 2 июля пройдёт детальное знакомство. В 10:00 по Москве пройдёт выступление представителей ВКонтакте, а с 11:00 до 19:00 пройдут индивидуальные технические онлайн-собеседования. Затем, уже в воскресенье пройдёт финальное собеседование и определение лучших кандидатов на позиции ВКонтакте.
Команда ВКонтакте хочет найти Data Scientists, RecSys Developers и ML Developers. Они приглашают специалистов в команды VK Клипы и VK Видео, Сообществ, Рекомендаций и развития сервисов и Core ML. Там, вместе с другими талантами, вы будете разрабатывать рекомендательные системы для двух крупнейших российских видеосервисов.
Команда рекомендаций и развития сервисов не просто помогает пользователям найти релевантный контент - они исследуем новые, ранее неизвестные предпочтения людей и помогаем авторам контента найти свою аудиторию. Команда сообщества занимается разными задачами - с сурового хайлоадного бэкенда с продуманными ML-алгоритмами и заканчивая креативными продуктовыми экспериментами. Команда Core ML занимается умным ранжированием ленты и подбором интересных публикаций, а также - многими другими направлениями.
20 июня — 1 июля состоится первая встреча, с вами свяжутся и договорятся о звонке, будет короткий ликбез о командах и выбор слота для индивидуального онлайн-интервью.
В субботу 2 июля пройдёт детальное знакомство. В 10:00 по Москве пройдёт выступление представителей ВКонтакте, а с 11:00 до 19:00 пройдут индивидуальные технические онлайн-собеседования. Затем, уже в воскресенье пройдёт финальное собеседование и определение лучших кандидатов на позиции ВКонтакте.
База данных на минималках
Встроенный модуль
Доступ к данным осуществляется с помощью ключей, как и в случае со словарями. А метод
В документации заявляют, что такая база данных является "надежной". Но учитывая, что
#shelve
Встроенный модуль
shelve
позволяет сохранять и читать произвольные данные. Таким образом, можно сохранять любые Python объекты для дальнейшего использования. Доступ к данным осуществляется с помощью ключей, как и в случае со словарями. А метод
shelve.open
поддерживает протокол контекстного менеджера, то есть можно не вызывать метод close
. В документации заявляют, что такая база данных является "надежной". Но учитывая, что
shelve
написан на pickle
, его стоит использовать только в совсем маленьких проектах.#shelve
Сохраняем бинарные данные
Модуль
Но классы, функции и методы сохранить не получится. Здесь также важно понимать, что при сохранении объекта сохраняется строка, указывающая, к какому классу относится этот объект.
Однако будьте осторожнее,
#pickle
Модуль
pickle
, который мы затронули в прошлом посте, реализует двоичные протоколы для сериализации и десериализации объектов. Вы можете сохранить любой объект, если возможно перевести каждый его атрибут в двоичный вид. Но классы, функции и методы сохранить не получится. Здесь также важно понимать, что при сохранении объекта сохраняется строка, указывающая, к какому классу относится этот объект.
Однако будьте осторожнее,
pickle
не защищен от ошибочных или вредоносных данных. Никогда не извлекайте данные, полученные из ненадежных или не прошедших проверку подлинности источников.#pickle
Аннотации типов: Union и Optional
Ранее на канале был пост про базовые аннотации типов. Но важно знать и про такие аннотации, как
При необходимости допустить использование не любых типов, а только некоторых, можно использовать аннотацию
Для объявления опциональных переменных используется
Кстати, аннотация
#аннотации
Ранее на канале был пост про базовые аннотации типов. Но важно знать и про такие аннотации, как
Union
и Optional
.При необходимости допустить использование не любых типов, а только некоторых, можно использовать аннотацию
Union[T, ...]
с указанием списка типов в квадратных скобках.Для объявления опциональных переменных используется
Optional[T]
. Такая аннотация нужна для переменных, которые либо имеют значение определенного типа, либо равны None
.Кстати, аннотация
Optional[T]
эквивалентна Union[T, None]
. #аннотации
Однажды ты спросишь меня, чего я жду больше: дрим-джоб или One Day Offer от Сбера. Я отвечу: «One Day Offer». И ты уйдёшь, так и не узнав, что это и есть шанс получить работу мечты.
Станьте частью команды Сбера за 1 день!
Форвард среди высокотехнологичных сервисных компаний ищет дата-сайентистов в Москве и Нижнем Новгороде. Подходит, если вы технарь уровня Middle, Senior или Lead с опытом в DS/ML больше 2 лет, который без труда кодит на Python. А если работали с рекомендательными системами — ещё лучше.
Каков порядок действий?
Посещаете 25 июня One Day Offer → проходите интервью → в тот же день получаете предложение, о котором мечтали → вместе с командой Сбера создаёте платформу, которая поможет создавать персональные рекомендации в разных сферах бизнеса.
Участвовать в One Day Offer
Станьте частью команды Сбера за 1 день!
Форвард среди высокотехнологичных сервисных компаний ищет дата-сайентистов в Москве и Нижнем Новгороде. Подходит, если вы технарь уровня Middle, Senior или Lead с опытом в DS/ML больше 2 лет, который без труда кодит на Python. А если работали с рекомендательными системами — ещё лучше.
Каков порядок действий?
Посещаете 25 июня One Day Offer → проходите интервью → в тот же день получаете предложение, о котором мечтали → вместе с командой Сбера создаёте платформу, которая поможет создавать персональные рекомендации в разных сферах бизнеса.
Участвовать в One Day Offer
Заменяем часть строки
Со строками в Python работать очень удобно, так как встроенных методов для них предостаточно. Одним из методов является
Первым аргументом передается подстрока, которая будет изменяться в исходной строке. Вторым аргументом — то, на что будет заменяться.
Также есть третий, опциональный, аргумент, который отвечает за то, сколько раз вы хотите заменить старую подстроку на новую. По умолчанию, все вхождения заменяются.
#строки
Со строками в Python работать очень удобно, так как встроенных методов для них предостаточно. Одним из методов является
str.replace()
, который позволяет заменять части строк.Первым аргументом передается подстрока, которая будет изменяться в исходной строке. Вторым аргументом — то, на что будет заменяться.
Также есть третий, опциональный, аргумент, который отвечает за то, сколько раз вы хотите заменить старую подстроку на новую. По умолчанию, все вхождения заменяются.
#строки
Спасти мир, исправив баги в коде? Легко!
По всей планете вдруг внезапно пошли сильнейшие ливни. Аномалия? Баги! Создатель напутал значения в коде, на котором написан наш мир, и теперь нам грозит утонуть в потоках воды с неба. Все исправить смогут только разработчики.
Помогите Создателю и решите три задачи на языке Python: выбирайте неправильные части кода и отмечайте правильный ответ из предложенных. Вся надежда на вас, поторопитесь!
https://vk.cc/ceD1h5
По всей планете вдруг внезапно пошли сильнейшие ливни. Аномалия? Баги! Создатель напутал значения в коде, на котором написан наш мир, и теперь нам грозит утонуть в потоках воды с неба. Все исправить смогут только разработчики.
Помогите Создателю и решите три задачи на языке Python: выбирайте неправильные части кода и отмечайте правильный ответ из предложенных. Вся надежда на вас, поторопитесь!
https://vk.cc/ceD1h5
Создаем пакеты
Пакет в Python — это, грубо говоря, папка с другими папками и модулями. Помимо разделения частей проекта, пакеты нужны для формирования пространства имен, чтобы можно работать с пакетами и модулями через точку, как в примере выше.
При импорте вида
Также примечателен файл init.py, который раньше был обязателен для создания пакетов. С версии Python 3.3 его необходимость пропала. Однако его функциональность на этом не заканчиваются.
#модули #пакеты
Пакет в Python — это, грубо говоря, папка с другими папками и модулями. Помимо разделения частей проекта, пакеты нужны для формирования пространства имен, чтобы можно работать с пакетами и модулями через точку, как в примере выше.
При импорте вида
from package import *
будет подключены либо все модули и объекты модуля __init__.py
, либо то, что находится в переменной __all__
в том же модуле __init__.py
— подробнее про эту переменную было в посте ранее.Также примечателен файл init.py, который раньше был обязателен для создания пакетов. С версии Python 3.3 его необходимость пропала. Однако его функциональность на этом не заканчиваются.
#модули #пакеты
Завершение программы
Функция
По факту функция просто поднимают исключение
Использовать
#sys #exit
Функция
exit
создана для удобства работы в интерактивном режиме, однако не рекомендуется использовать её внутри скриптов. По факту функция просто поднимают исключение
SystemExit
. А при попытке вызова без скобок напишут подсказку о правильном способе выхода из интерпретатора.Использовать
sys.exit()
стоит потому, что этот метод лежит в стандартном модуле и всегда там доступен. Также это довольно явный способ завершения программы.#sys #exit
ИММИГРАЦИЯ В США С ЛИЦЕНЗИРОВАННЫМ ИММИГРАЦИОННЫМ АДВОКАТОМ
Всем привет!
Меня зовут Станислав Шамаев 🙋🏼♂️, я лицензированный бизнес-иммиграционный адвокат. Также являюсь основателем юридической компании №1 в Майами.
Я специализируюсь на визах талантов ЕВ-1А и О-1 для IT, Digital и специалистов в сфере кибербезопасности в разных сферах и проведу бесплатный СТРИМ на моем Telegram-канале ‘’Одной ногой в США’’ уже в ПЯТНИЦУ 1 июля 2022 года с разбором 3-х ключевых критериев для получения визы:
▪️которые с легкостью могут закрыть большинство специалистов в сфере IT, Digital и кибербезопасности - статьи, вклад в индустрию, конкурентная зп на рынке .
▪️ А также обсудим, что может быть вкладом в профессиональную индустрию и как его упаковать в критерий визы талантов?
Расскажу на примере реальных кейсов моих клиентов!
▪️Список самые актуальные х профессий на рынке сегодня, которые ТРЕБУЮТСЯ в США немедленно! 🇺🇸.
🔥 В конце СТРИМА отвечу на все вопросы зрителей, А также в подарок каждый зритель получит гайд по критериям виз "Простая Иммиграция" БЕСПЛАТНО.
Но и это еще не все! Каждый участник стрима получит от меня персонализированный разбор его иммиграционного кейса в течение 48 часов и БЕСПЛАТНЫЙ подбор визовой программы.
СТРИМ ПО ВИЗЕ ТАЛАНТОВ ДЛЯ IT-СПЕЦИАЛИСТОВ И СПЕЦИАЛИСТОВ В СФЕРЕ КИБЕРБЕЗОПАСНОСТИ ПРОЙДЕТ ⏰:
В 19.00 по Европе
В 20.00 по Москве
В 13.00 по Майами
Где? 👉 На канале ‘’Одной ногой в США’’
Как попасть на стрим? 👉 ПОДПИШИТЕСЬ на Telegram-канале "Одной ногой в США'' , где вы сможете найти все подробности проведения мероприятия.
До встречи на стриме!
Всем привет!
Меня зовут Станислав Шамаев 🙋🏼♂️, я лицензированный бизнес-иммиграционный адвокат. Также являюсь основателем юридической компании №1 в Майами.
Я специализируюсь на визах талантов ЕВ-1А и О-1 для IT, Digital и специалистов в сфере кибербезопасности в разных сферах и проведу бесплатный СТРИМ на моем Telegram-канале ‘’Одной ногой в США’’ уже в ПЯТНИЦУ 1 июля 2022 года с разбором 3-х ключевых критериев для получения визы:
▪️которые с легкостью могут закрыть большинство специалистов в сфере IT, Digital и кибербезопасности - статьи, вклад в индустрию, конкурентная зп на рынке .
▪️ А также обсудим, что может быть вкладом в профессиональную индустрию и как его упаковать в критерий визы талантов?
Расскажу на примере реальных кейсов моих клиентов!
▪️Список самые актуальные х профессий на рынке сегодня, которые ТРЕБУЮТСЯ в США немедленно! 🇺🇸.
🔥 В конце СТРИМА отвечу на все вопросы зрителей, А также в подарок каждый зритель получит гайд по критериям виз "Простая Иммиграция" БЕСПЛАТНО.
Но и это еще не все! Каждый участник стрима получит от меня персонализированный разбор его иммиграционного кейса в течение 48 часов и БЕСПЛАТНЫЙ подбор визовой программы.
СТРИМ ПО ВИЗЕ ТАЛАНТОВ ДЛЯ IT-СПЕЦИАЛИСТОВ И СПЕЦИАЛИСТОВ В СФЕРЕ КИБЕРБЕЗОПАСНОСТИ ПРОЙДЕТ ⏰:
В 19.00 по Европе
В 20.00 по Москве
В 13.00 по Майами
Где? 👉 На канале ‘’Одной ногой в США’’
Как попасть на стрим? 👉 ПОДПИШИТЕСЬ на Telegram-канале "Одной ногой в США'' , где вы сможете найти все подробности проведения мероприятия.
До встречи на стриме!
Статические методы
Отличие статических методов от обычных в том, что они привязаны к классу, а не объекту. То есть они могут быть вызваны напрямую у класса.
Статический метод не принимает ни объект (
Реализовать статический метод можно двумя способами. Один из них — присвоить классу новый метод, напрямую передав изначальный метод в функцию
Но так делать не принято, поэтому чаще всего
#staticmethod
Отличие статических методов от обычных в том, что они привязаны к классу, а не объекту. То есть они могут быть вызваны напрямую у класса.
Статический метод не принимает ни объект (
self
), ни класс (cls
) в аргументах. То есть такие методы не могут модифицировать ни объект, ни сам класс. Реализовать статический метод можно двумя способами. Один из них — присвоить классу новый метод, напрямую передав изначальный метод в функцию
staticmethod
. Но так делать не принято, поэтому чаще всего
staticmethod
используют в качестве декоратора при написании методов прямо в классе. #staticmethod
Находим наименьшие и наибольшие
В стандартной библиотеке есть модуль
Особенности и пользу этой структуры данных пока что разбирать не будем, но посмотрим на два интересных метода в этом модуле.
С помощью методов
Первым аргументов передается, сколько элементов нужно взять, вторым — список.
#heap
В стандартной библиотеке есть модуль
heapq
, который, как можно понять по названию, реализует структуру данных куча.Особенности и пользу этой структуры данных пока что разбирать не будем, но посмотрим на два интересных метода в этом модуле.
С помощью методов
nsmallest
и nlargest
можно получить наименьшие и наибольшие элементы в списке. Первым аргументов передается, сколько элементов нужно взять, вторым — список.
#heap
Получаем информацию о памяти на диске
Со встроенным модулем
Но с помощью
Так как все три значения возвращаются в байтах, в примере мы их перевели и вывели в гигабайты для лучшей наглядности.
#shutil
Со встроенным модулем
shutil
многие уже, вероятно, знакомы, но его обычно используют в контексте задач копирования, переноса файлов и папок.Но с помощью
shutil
мы можем даже получить информацию о памяти на жестком диске компьютера. Метод disk_usage
возвращает количество всей, занятой и свободной памяти.Так как все три значения возвращаются в байтах, в примере мы их перевели и вывели в гигабайты для лучшей наглядности.
#shutil
Списковые включения
На основе итерируемых объектов можно удобно и без циклов строить списки в одну строчку — такой синтаксис называется списковыми включениями.
Сейчас подробнее разберем именно списки, но по такому же принципу можно создавать и словари.
В квадратных скобках вы пишите самую обычную конструкцию цикла
Как правило, списковые включения работают заметно быстрее, чем циклы. Однако, злоупотреблять этим не рекомендуется, так как это зачастую снижает читаемость кода.
#списки #словари
На основе итерируемых объектов можно удобно и без циклов строить списки в одну строчку — такой синтаксис называется списковыми включениями.
Сейчас подробнее разберем именно списки, но по такому же принципу можно создавать и словари.
В квадратных скобках вы пишите самую обычную конструкцию цикла
for
, но само выражение ставите перед ключевым словом for
. Также можно добавлять условия в конце записи.Как правило, списковые включения работают заметно быстрее, чем циклы. Однако, злоупотреблять этим не рекомендуется, так как это зачастую снижает читаемость кода.
#списки #словари
Защищаем исходный код обфускацией
Обфускация кода — это превращение исходного кода в нечитаемый для человека вид, при этом сохраняя всю функциональность программы.
Цель подобных действий заключается в защите скриптов. Обфускация делает анализ кода крайне сложным, а иногда и невозможным.
Таким образом, другим разработчикам становится проблематично получить и понять ваш исходный код для того, чтобы, например, взломать программу.
В Python есть отличная библиотека
#pyarmor
Обфускация кода — это превращение исходного кода в нечитаемый для человека вид, при этом сохраняя всю функциональность программы.
Цель подобных действий заключается в защите скриптов. Обфускация делает анализ кода крайне сложным, а иногда и невозможным.
Таким образом, другим разработчикам становится проблематично получить и понять ваш исходный код для того, чтобы, например, взломать программу.
В Python есть отличная библиотека
pyarmor
, предназначенная именно для этого. Пример использования этого пакета в терминале представлен выше на картинке. #pyarmor
Превращаем текст в речь
На Python есть классная библиотека
При создании экземпляра класса
Сохранить полученный результат можно с помощью метода
#gtts
На Python есть классная библиотека
gTTS
(Google Text-to-Speech), которая взаимодействует с Google Translate's text-to-speech API и позволяет делать из текста аудиофайлы. Пакет как всегда устанавливается через pip
. При создании экземпляра класса
gTTS
мы передаем исходный текст первым аргументом. Также можно передать опциональный аргумент, отвечающий за язык, который по умолчанию является английским. Сохранить полученный результат можно с помощью метода
save
, в который передаем название файла. #gtts