Обучение питона с нуля: Самоучитель Python | Python 3 для начинающих и чайников

Содержание

Числа: целые, вещественные, комплексные | Python 3 для начинающих и чайников

Числа в Python 3: целые, вещественные, комплексные. Работа с числами и операции над ними.

Целые числа (int)

Числа в Python 3 ничем не отличаются от обычных чисел. Они поддерживают набор самых обычных математических операций:

x + yСложение
x — yВычитание
x * yУмножение
x / yДеление
x // yПолучение целой части от деления
x % yОстаток от деления
-xСмена знака числа
abs(x)Модуль числа
divmod(x, y)Пара (x // y, x % y)
x ** yВозведение в степень
pow(x, y[, z])xy по модулю (если модуль задан)

Также нужно отметить, что целые числа в python 3, в отличие от многих других языков, поддерживают длинную арифметику (однако, это требует больше памяти). yПобитовое исключающее илиx & yПобитовое иx << nБитовый сдвиг влевоx >> yБитовый сдвиг вправо~xИнверсия битов

Дополнительные методы

int.bit_length() — количество бит, необходимых для представления числа в двоичном виде, без учёта знака и лидирующих нулей.

>>> n = -37
>>> bin(n)
'-0b100101'
>>> n.bit_length()
6

int.to_bytes(length, byteorder, *, signed=False) — возвращает строку байтов, представляющих это число.

>>> (1024).to_bytes(2, byteorder='big')
b'\x04\x00'
>>> (1024).to_bytes(10, byteorder='big')
b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00'
>>> (-1024).to_bytes(10, byteorder='big', signed=True)
b'\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00'
>>> x = 1000
>>> x.to_bytes((x.bit_length() // 8) + 1, byteorder='little')
b'\xe8\x03'

classmethod int. from_bytes(bytes, byteorder, *, signed=False) — возвращает число из данной строки байтов.

>>> int.from_bytes(b'\x00\x10', byteorder='big')
16
>>> int.from_bytes(b'\x00\x10', byteorder='little')
4096
>>> int.from_bytes(b'\xfc\x00', byteorder='big', signed=True)
-1024
>>> int.from_bytes(b'\xfc\x00', byteorder='big', signed=False)
64512
>>> int.from_bytes([255, 0, 0], byteorder='big')
16711680

Системы счисления

Те, у кого в школе была информатика, знают, что числа могут быть представлены не только в десятичной системе счисления. К примеру, в компьютере используется двоичный код, и, к примеру, число 19 в двоичной системе счисления будет выглядеть как 10011. Также иногда нужно переводить числа из одной системы счисления в другую. Python для этого предоставляет несколько функций:

  • int([object], [основание системы счисления]) — преобразование к целому числу в десятичной системе счисления. По умолчанию система счисления десятичная, но можно задать любое основание от 2 до 36 включительно.
  • bin(x) — преобразование целого числа в двоичную строку.
  • hex(х) — преобразование целого числа в шестнадцатеричную строку.
  • oct(х) — преобразование целого числа в восьмеричную строку.

Примеры:

>>> a = int('19') # Переводим строку в число
>>> b = int('19.5')  # Строка не является целым числом
Traceback (most recent call last):
  File "", line 1, in
ValueError: invalid literal for int() with base 10: '19.5'
>>> c = int(19.5)  # Применённая к числу с плавающей точкой, отсекает дробную часть
>>> print(a, c)
19 19
>>> bin(19)
'0b10011'
>>> oct(19)
'0o23'
>>> hex(19)
'0x13'
>>> 0b10011  # Так тоже можно записывать числовые константы
19
>>> int('10011', 2)
19
>>> int('0b10011', 2)
19

Вещественные числа (float)

Вещественные числа поддерживают те же операции, что и целые. Однако (из-за представления чисел в компьютере) вещественные числа неточны, и это может привести к ошибкам:

>>> 0. 1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1
0.9999999999999999

Для высокой точности используют другие объекты (например Decimal и Fraction)).

Также вещественные числа не поддерживают длинную арифметику:

>>> a = 3 ** 1000
>>> a + 0.1
Traceback (most recent call last):
  File "", line 1, in
OverflowError: int too large to convert to float

Простенькие примеры работы с числами:

>>> c = 150
>>> d = 12.9
>>> c + d
162.9
>>> p = abs(d - c)  # Модуль числа
>>> print(p)
137.1
>>> round(p)  # Округление
137

Дополнительные методы

float.as_integer_ratio() — пара целых чисел, чьё отношение равно этому числу.

float.is_integer() — является ли значение целым числом.

float.hex() — переводит float в hex (шестнадцатеричную систему счисления).

classmethod float.fromhex(s) — float из шестнадцатеричной строки.

>>> (10. 5).hex()
'0x1.5000000000000p+3'
>>> float.fromhex('0x1.5000000000000p+3')
10.5

Помимо стандартных выражений для работы с числами (а в Python их не так уж и много), в составе Python есть несколько полезных модулей.

Модуль math предоставляет более сложные математические функции.

>>> import math
>>> math.pi
3.141592653589793
>>> math.sqrt(85)
9.219544457292887

Модуль random реализует генератор случайных чисел и функции случайного выбора.

>>> import random
>>> random.random()
0.15651968855132303

Комплексные числа (complex)

В Python встроены также и комплексные числа:

>>> x = complex(1, 2)
>>> print(x)
(1+2j)
>>> y = complex(3, 4)
>>> print(y)
(3+4j)
>>> z = x + y
>>> print(x)
(1+2j)
>>> print(z)
(4+6j)
>>> z = x * y
>>> print(z)
(-5+10j)
>>> z = x / y
>>> print(z)
(0.44+0.08j)
>>> print(x. conjugate())  # Сопряжённое число
(1-2j)
>>> print(x.imag)  # Мнимая часть
2.0
>>> print(x.real)  # Действительная часть
1.0
>>> print(x > y)  # Комплексные числа нельзя сравнить
Traceback (most recent call last):
  File "", line 1, in
TypeError: unorderable types: complex() > complex()
>>> print(x == y)  # Но можно проверить на равенство
False
>>> abs(3 + 4j)  # Модуль комплексного числа
5.0
>>> pow(3 + 4j, 2)  # Возведение в степень
(-7+24j)

Для работы с комплексными числами используется также модуль cmath.

Для вставки кода на Python в комментарий заключайте его в теги <pre><code>Ваш код</code></pre>

Свежее

  • Модуль csv — чтение и запись CSV файлов
  • Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
  • Онлайн-обучение Python: сравнение популярных программ

Категории

  • Книги о Python
  • GUI (графический интерфейс пользователя)
  • Курсы Python
  • Модули
  • Новости мира Python
  • NumPy
  • Обработка данных
  • Основы программирования
  • Примеры программ
  • Типы данных в Python
  • Видео
  • Python для Web
  • Работа для Python-программистов

Полезные материалы

  • Сделай свой вклад в развитие сайта!
  • Самоучитель Python
  • Карта сайта
  • Отзывы на книги по Python
  • Реклама на сайте

Мы в соцсетях

Бесплатный курс Python (питон), самостоятельное обучение

Основы языка Python

  • 1. Привет, Мир!
  • 2. Комментарии
  • 3. Инструкции (Statements)
  • 4. Как мы проверяем ваши решения
  • 5. Синтаксические ошибки

Python (или, как его еще называют, «питон») – популярный и перспективный язык. Его часто выбирают в качестве первого для знакомства с программированием.
Изучать Python мы будем с нуля, с самых азов. Первый модуль – плацдарм  для написания осмысленных программ. В нем мы разберем, как дать команду компьютеру на языке Python. Расскажем, что такое комментарии и зачем они нужны. На примере проверки ваших решений на сайте рассмотрим, что такое тестирование и как читать вывод тестов. Объясним, почему нельзя нарушать грамматические правила языка программирования.

Арифметика в Python

  • 6. Арифметические операции
  • 7. Операторы
  • 8. Коммутативная операция
  • 9. Композиция операций
  • 10. Приоритет
  • 11. Числа с плавающей точкой
  • 12. Линтер

Современные программы создаются для обслуживания бизнесов, помощи в ежедневной жизни и развлечений. Но в основе их работы по-прежнему лежат вычисления. Наиболее простая и базовая тема в программировании — арифметика. В этом модуле мы переведем арифметические действия на язык программирования, освоим базовую терминологию – например, чем оператор отличается от операнды. Поговорим о приоритете операций. А под конец расскажем, что такое линтер и почему он может «ругаться».

Строки

  • 13. Кавычки
  • 14. Экранированные последовательности
  • 15. Конкатенация
  • 16. Кодировка

Текст в программировании называется «строками», и эта тема не так проста, как может показаться. Как вывести фразу, в которой есть и одинарные, и двойные кавычки? Что такое экранированная последовательность? Модуль посвящен разным аспектам написания текста – мы поэкспериментируем с выводом разных строк и поговорим о кодировке.

Переменные

  • 17. Что такое переменная
  • 18. Изменение переменной
  • 19. Выбор имени переменной
  • 20. Ошибки при работе с переменными
  • 21. Выражения в определениях
  • 22. Переменные и конкатенация
  • 23. Именование переменных
  • 24. Магические числа
  • 25. Константы

Информацию можно помещать в специальные «хранилища», а потом использовать сколько угодно раз. Эти хранилища называются переменными, и они помогают упростить код и сократить лишние повторения.

Глубже про строки

  • 26. Интерполяция
  • 27. Извлечение символов из строки
  • 28. Срезы строк
  • 29. Multi-line строки

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

Типы данных

  • 30. Типы данных
  • 31. Сильная (или Строгая) типизация
  • 32. Неизменяемость примитивных типов
  • 33. Явное преобразование типов

Python – язык с сильной типизацией и неизменяемыми примитивными типами данных. Что произойдет, если мы попробуем умножить число на строку? Каким образом Python понимает, что за тип данных перед ним? Что такое преобразование типов? Ответы на эти вопросы вы найдете в текущем модуле.

Вызов функций

  • 34. Функции и их вызов
  • 35. Сигнатура функции
  • 36. Аргументы по умолчанию
  • 37. Вызов функции — выражение
  • 38. Функции с переменным числом параметров
  • 39. Детерминированность
  • 40. Стандартная библиотека

Для выражения любой произвольной операции в программировании существует понятие «функция». Функции — кирпичики, из которых программисты строят системы. В этом модуле мы научимся пользоваться уже созданными функциями. Посмотрим на сигнатуру функции в документации и разберемся, как её использовать. Познакомимся со стандартными библиотеками, которые хранят тысячи функций. Все функции невозможно выучить, но каждый программист должен знать, где искать документацию по ним.

Свойства и методы

  • 41. Объекты
  • 42. Неизменяемость
  • 43. Методы как выражения
  • 44. Цепочка вызовов

Данные, которыми мы оперируем в своих программах, могут обладать важными атрибутами. В Python атрибуты встроены прямо в язык. Кроме статических свойств у данных существуют методы — функции, находящиеся внутри свойств. Свойства и методы — такие же выражения, как переменные или вызовы функции, а значит, их можно всячески комбинировать. Глубже эти темы разбираются на отдельных курсах, посвященных объектно-ориентированным возможностям Python. Мы же в этом модуле изучим основы.

Определение функций

  • 45. Создание (определение) функций
  • 46. Возврат значений
  • 47. Параметры функций
  • 48. Необязательные параметры функций
  • 49. Именованные аргументы

Определение собственных функций значительно упрощает написание и поддержку программ. Например, умение определять функции позволяет объединять сложные (составные) операции в одну – вся сложность может быть скрыта за одной простой функцией. Научившись писать функции, вы сделаете первый шаг на пути к построению по-настоящему полезных программ. И мы вам в этом поможем. В этом модуле вы создадите свою первую функцию и научитесь давать ей название, которое поймет любой разработчик.

Логика

  • 50. Логический тип
  • 51. Предикаты
  • 52. Комбинирование операций и функций
  • 53. Логические операторы
  • 54. Отрицание
  • 55. Результат логических выражений

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

Условные конструкции

  • 56. Условная конструкция (if)
  • 57. else
  • 58. Конструкция else + if = elif
  • 59. Тернарный оператор

Задача функции-предиката — получить ответ на вопрос, но обычно этого недостаточно и нужно выполнить определенное действие в зависимости от ответа. If и if-else  – конструкции Python, с помощью которых программист может выбирать необходимое поведение программы в зависимости от разных условий: пропускать одни инструкции и выполнять другие. Их и разберем на практике в этом модуле.

  • 60. Цикл While
  • 61. Агрегация данных (Числа)
  • 62. Агрегация данных (Строки)
  • 63. Обход строк
  • 64. Условия внутри тела цикла
  • 65. Формирование строк в циклах
  • 66. Пограничные случаи
  • 67. Синтаксический сахар
  • 68. Возврат из циклов
  • 69. Цикл For

Любой код может повторяться десятки, тысячи, миллионы раз. В комбинации с другими известными нам инструментами — переменными и условиями — это открывает множество возможностей по построению программ и сложных систем. Приведем простой пример. Вам нужно найти конкретную фразу в учебнике из 500 страниц. Фразу вы помните, а вот номер страницы нет. Самый простой (и долгий) способ — последовательно просматривать страницы до тех пор, пока не найдете нужную. Для выполнения таких повторяющихся действий и нужны циклы.

Готовы попробовать?

Регистрация не требуется

Демо урок

Основы Python

В этом разделе вы изучите основы Python. Если вы новичок в программировании на Python, этот раздел основ Python идеально подходит для вас.

После прохождения учебных пособий вы будете уверенно программировать на Python и сможете создавать простые программы на Python.

Раздел 1. Основы

  • Синтаксис — познакомит вас с основным синтаксисом программирования Python.
  • Переменные — объясните вам, что такое переменные и как создавать краткие и содержательные переменные.
  • Строки — узнайте о строковых данных и некоторых основных операциях со строками.
  • Числа — познакомить вас с часто используемыми типами чисел, включая целые числа и числа с плавающей запятой.
  • Логические значения — объясняют логический тип данных, ложные и истинные значения в Python.
  • Константы — покажет вам, как определять константы в Python.
  • Комментарии — узнайте, как делать заметки в коде.
  • Преобразование типов — узнайте, как преобразовать значение одного типа в другой, например, преобразовать строку в число.

Раздел 2. Операторы

  • Операторы сравнения. Знакомство с операторами сравнения и их использованием для сравнения двух значений.
  • Логические операторы — показать вам, как использовать логические операторы для объединения нескольких условий.

Раздел 3. Поток управления

  • оператор if…else — узнайте, как выполнить блок кода на основе условия.
  • Тернарный оператор — познакомьте вас с тернарным оператором Python, который делает ваш код более кратким.
  • цикл for с функцией range() — покажет вам, как выполнить блок кода фиксированное количество раз, используя цикл for с функцией range().
  • while — показать вам, как выполнить блок кода, если условие истинно.
  • break — научиться преждевременному выходу из цикла.
  • продолжить — показать вам, как пропустить текущую итерацию цикла и начать следующую.
  • pass — показать вам, как использовать оператор pass в качестве заполнителя.

Раздел 4. Функции

  • Функции Python — познакомит вас с функциями Python, а также с тем, как определять функции и повторно использовать их в программе.
  • Параметры по умолчанию — показывает, как указать значения по умолчанию для параметров функции.
  • Аргументы ключевого слова — узнайте, как использовать аргументы ключевого слова, чтобы сделать вызов функции более очевидным.
  • Рекурсивные функции — узнайте, как определять рекурсивные функции в Python.
  • Лямбда-выражения — покажет вам, как определять анонимные функции в Python с помощью лямбда-выражений.
  • Строки документации — покажите, как использовать строки документации для документирования функции.

Раздел 5. Списки

  • Список — познакомит вас с типом списка и с тем, как эффективно манипулировать элементами списка.
  • Кортеж — познакомить вас с кортежем, представляющим собой список, который не меняется на протяжении всей программы.
  • Сортировка списка на месте — показано, как использовать метод sort() для сортировки списка на месте.
  • Сортировка списка — узнайте, как использовать функцию sorted() для возврата нового отсортированного списка из исходного списка.
  • Нарезка списка — покажет вам, как использовать технику нарезки списка для эффективного управления списками.
  • Распаковать список — показать, как связать элементы списка с несколькими переменными с помощью распаковки списка.
  • Итерация по списку — узнайте, как использовать цикл for для итерации по списку.
  • Найти индекс элемента — покажет вам, как найти индекс первого вхождения элемента в список.
  • Iterables — объясните вам iterables и разницу между iterable и iterator.
  • Преобразование элементов списка с помощью map() — покажет вам, как использовать функцию map() для преобразования элементов списка.
  • Фильтровать элементы списка с помощью filter() — используйте функцию filter() для фильтрации элементов списка.
  • Уменьшите элементы списка до значения с помощью функции reduce() — используйте функцию сокращения(), чтобы уменьшить элементы списка до одного значения.
  • Понимание списков — покажет вам, как создать новый список на основе существующего списка.

Раздел 6. Словари

  • Словарь — познакомить вас с типом словаря.
  • Понимание словаря — покажет вам, как использовать понимание словаря для создания нового словаря из существующего.

Раздел 7. Наборы

  • Наборы — объясните вам тип набора и покажите, как эффективно манипулировать элементами набора.
  • Понимание набора — объясните вам понимание набора, чтобы вы могли создать новый набор на основе существующего набора с более кратким и элегантным синтаксисом.
  • Объединение наборов — покажет вам, как объединить два или более набора с помощью метода union() или оператора объединения наборов ( и ).
  • Пересечение множеств — показывает, как пересекать два или более множества с помощью метода пересечения () или оператора пересечения множеств (|).
  • Разность наборов — узнайте, как найти разницу между наборами с помощью метода set разность() или оператора разности наборов ( - ) используя 9).
  • Подмножество — проверьте, является ли набор подмножеством другого набора.
  • Надмножество — проверьте, является ли набор надмножеством другого набора.
  • Непересекающиеся множества — проверьте, не пересекаются ли два множества.

Раздел 8. Обработка исключений

  • try…except — показывает, как более изящно обрабатывать исключения с помощью оператора try…except.
  • try…except…finally – узнайте, как выполнить блок кода независимо от того, возникает исключение или нет.
  • try…except…else — объясните вам, как использовать оператор try…except…else для управления выполнением программы в случае возникновения исключений.

Раздел 9. Подробнее о циклах Python

  • for…else — объясните вам оператор for else .
  • while…else – обсудите оператор while else .
  • эмуляция цикла do…while — покажет вам, как эмулировать цикл do…while в Python с помощью оператора цикла while.

Раздел 10. Дополнительные сведения о функциях Python

  • Распаковка кортежей — покажет вам, как распаковать кортеж, который присваивает отдельные элементы кортежа нескольким переменным.
  • *args Параметры — узнайте, как передать функции переменное количество аргументов.
  • **kwargs Параметры — показать вам, как передать переменное количество аргументов ключевого слова в функцию.
  • Частичные функции — узнайте, как определять частичные функции.
  • Типовые подсказки — показывают, как добавлять подсказки к параметрам функции и как использовать средство проверки статического типа (mypy) для статической проверки типа.

Раздел 11. Модули и пакеты

  • Модули — познакомит вас с модулями Python и покажет, как писать собственные модули.
  • Путь поиска модуля — объясните, как работает путь поиска модуля Python при импорте модуля.
  • __name__ переменная — покажет вам, как использовать переменную __name__ для управления выполнением файла Python как скрипта или модуля.
  • Пакеты — узнайте, как использовать пакеты для более структурированной организации модулей.

Раздел 14. Сторонние пакеты, PIP и виртуальные среды

  • Указатель пакетов Python (PyPI) и pip — познакомим вас с указателем пакетов Python и узнайте, как устанавливать сторонние пакеты с помощью pip.
  • Виртуальные среды — узнайте, что такое виртуальные среды Python и, что более важно, зачем они вам нужны.
  • Установите pipenv в Windows — покажите, как установить инструмент pipenv в Windows.

Раздел 15. Строки

  • F-строки — узнайте, как использовать f-строки для форматирования текстовых строк в понятном синтаксисе.
  • Необработанные строки — используйте необработанные строки для обработки строк, содержащих обратную косую черту.
  • Обратная косая черта — объясните, как Python использует обратную косую черту ( \ ) в строковых литералах.

Объектно-ориентированное программирование Python (ООП)

В этом ООП Python ясно объясняется объектно-ориентированное программирование Python, чтобы вы могли применять его для более эффективной разработки программного обеспечения.

К концу этого модуля Python OOP вы будете хорошо знать принципы объектно-ориентированного программирования. И вы узнаете, как использовать синтаксис Python для создания надежных и надежных программных приложений.

Чему вы научитесь

  • Создавайте объекты в Python, определяя классы и методы.
  • Расширение классов с помощью наследования.
  • Принципы SOLID в объектно-ориентированном программировании.

Для кого предназначен этот учебник?

Если вы новичок в объектно-ориентированном программировании или если у вас есть базовые навыки Python и вы хотите подробно изучить, как и когда правильно применять ООП в Python, это руководство для вас.

Раздел 1. Классы и объекты

  • Объектно-ориентированное программирование — познакомит вас с важными понятиями объектно-ориентированного программирования Python.
  • Класс — узнайте, как определить класс и создать новые объекты из класса.
  • Переменные класса — объясните переменные (или атрибуты) класса
  • Методы экземпляра — расскажут вам о методах экземпляра и помогут понять различия между функцией и методом.
  • __init__() — покажет вам, как использовать метод __init__ для инициализации атрибутов объекта.
  • Переменные экземпляра — понять переменные экземпляра.
  • Частные атрибуты — узнайте о частных атрибутах и ​​о том, как их эффективно использовать.
  • Атрибуты класса — понимание атрибутов класса и, что более важно, когда следует использовать атрибуты класса.
  • Статические методы — объясняют вам статические методы и показывают, как их использовать для группировки связанных функций в классе.

Раздел 2.

Специальные методы

  • Метод __str__ показывает, как использовать метод __str__ dunder для возврата строкового представления объекта.
  • Метод __repr__ — узнайте, как использовать метод __repr__ и основное различие между методами __str__ и __repr__.
  • Метод __eq__ — научитесь определять логику равенства для сравнения объектов по значениям.
  • Метод __hash__ — покажет вам, как сделать класс хешируемым с помощью метода __has__.
  • Метод __bool__ — поможет вам определить, является ли пользовательский объект True или False с помощью метода __bool__.
  • Метод __del__ — понять, как работает метод __del__.

Раздел 3. Свойство

  • Свойство — показывает, как использовать класс свойств для создания свойства.
  • Декоратор @property — узнайте, как использовать декоратор @property для создания свойства.
  • Свойство только для чтения — узнайте, как определять свойства только для чтения и использовать их для вычисляемых свойств.
  • Удалить свойство — руководство по удалению свойства объекта.

Раздел 4. Одиночное наследование

  • Наследование – объясните вам концепцию наследования и как определить класс, который наследуется от другого класса.
  • Методы переопределения — показать вам, как работают методы переопределения.
  • super() — научитесь делегировать методы родительского класса из метода дочернего класса.
  • __slots__ — используйте __slots__, чтобы сделать класс более эффективным с точки зрения использования памяти.
  • Абстрактный класс — узнайте, что такое абстрактные классы и как определять абстрактные классы.

Раздел 5. Перечисление

  • Перечисление — покажет вам, как определить перечисление в Python.
  • Псевдонимы перечисления и @enum.unique — познакомим вас с псевдонимами перечисления и тем, как использовать декоратор enum.unique для обеспечения уникальности значений членов.
  • Настройка и расширение перечислений — узнайте, как настроить поведение классов перечислений и как расширить собственный класс перечислений.
  • auto — используйте класс enum auto для создания уникальных значений для членов перечисления.

Раздел 6. Принципы SOLID

Этот раздел знакомит вас с принципами объектно-ориентированного программирования SOLID. Эти пять принципов проектирования делают ваше программное обеспечение более удобным в сопровождении и гибким.

  • Принцип единой ответственности — класс должен иметь единую ответственность.
  • Принцип открытости/закрытости – класс должен быть открыт для расширения, но закрыт для модификации.
  • Лисков Принцип замещения – дочерний класс должен иметь возможность заменять родительский класс.
  • Принцип разделения интерфейсов – используйте множество маленьких интерфейсов вместо одного большого интерфейса.
  • Принцип инверсии зависимостей — сделать высокоуровневый модуль зависимым от абстракции, а не низкоуровневого модуля.

Раздел 7. Множественное наследование

  • Множественное наследование — узнайте, как реализовать множественное наследование, и поймите, как работает порядок разрешения методов (MRO) в Python.
  • Mixin — познакомит вас с концепцией миксина и с тем, как реализовать миксин в Python.

Раздел 8. Дескрипторы

  • Дескрипторы. Объясните, как работают дескрипторы и как их использовать для повторного использования кода.
  • Данные и неданные дескрипторы – понимание различий между данными и неданными дескрипторами

Раздел 9. Метапрограммирование

  • __new__ — узнайте, как Python использует метод __new__ для создания нового экземпляра класса. Класс типов
  • — покажет вам, как динамически создавать класс с использованием класса типов.
  • Метакласс — объясните метакласс и покажите, как определить собственный метакласс для создания других классов.
  • Пример метакласса — покажите вам пример метакласса, который позволяет внедрить множество функций в классы.
  • класс данных — используйте класс данных для добавления специальных методов, таких как __init__ и __repr__, в пользовательские классы.