...
...
== сравнивает по значению, is сравнивает по адресам памяти.
Неизменяемые по значению, изменяемые по ссылке.
*args это такой элемент, который принимает в себя неограниченное колличество позиционных аргументов функции
**kwargs этот аргумент отвечает за то, что он принимает в себя неограниченное коллличество аргументво, которое
мы передаем с помощью ключевых слов *args ввиде картежа **kwargs ввиде словоря
self - в пайтоне, чтобы понять к какому классу относится функция, первым агрументом в эту функцию передается self self - это просто ссылка на какой-то уникальный объект какого-то класса
super - это ссылка на объект родительской сущности
- Метод объекта принимает первый аргумент self - как ссылку на текущий объект. Эти методы характеризуют поведение
какого-то экземпляра какой-то сущности - Методы коротые принадлежат классу их можно создать с помощью декоратора @classsmethod первый аргумент cls - это
ссылка на класс. Они принадлежат классу и зарактеризуют в целом поведение всего класса. - Статик метод @staticmethod обязательных аргументов у него нет. Он не принадлежит ни классу, ни объекту.
Метод объекта можно вызвать только, когда создан объект. a = A(), a.b()
Метод класса можно вызвать сразу от класса A.c()
В Python нет модификаторов доступа, все по умолчанию public. Каквpythonреализуютсяpublic, privateиprotectedметодыи атрибуты?
В пайтоне нет модификаторов доступа. Но есть определенные договоренности.
- public - без подчеркиваний
- protected - с одним _
- private - с двумя __
Что такое декораторы? Зачем нужны? Как реализовать в python простой декоратор и декоратор с пробросом аргумента?
Декоратор - это паттерн проектирования. По канону он реализуется через класс. С помощью этого класса меняется
поведение какого-то кода, без имзенений этого кода.
Можно так же реализовать через функцию:
def decorator(func):
def wrapper(*args, **kwargs):
return func()
return wrapper
Так как в пайтоне нет интерфейсов. А нам надо реализовать какие-то контракты между классами. Мы для этого
используем абстрактный класс. Абстрактный класс это класс, у которого нельзя создать объект.
from abc import ABC, abstractmethod
Что такое метаклассы? Для чего они используются? Какие методы там используются? Как реализовать на Python?
Если классы являются шаблонами для объектов, то метаклассы являются шаблонами для классов. На основе
метаклассов строятся классы, на основе классов строяться объекты. Для чего использются метаклассы?
Метаклассы используются для того, чтобы перехватить создание класса. И его как-то изменить или изменить
какое-то поведение, например создание объекта.
Соответственно какие методы там есть? new, init, prepare, call.
prepare - подготавливает данные, потом они попадают в new, new создает класс, init отвечает за его
инициализацию, а call за создание объекта класса.
class OneMeta(ABCMeta):
pass
Инкапсуляция, полиморфизм, наследование, абстракция.
ООП это такая парадигма, объектно ориентированное программирование, когда мы код выстраеваем ввиде совакупности
объектов, которые являются объектами каких-то классов, а классы выстраивают иерархию какого-то наследования.
- Абстракция: говорит о том, что мы в коде используем только характеристики обхекта, которые нам важны
конкретно в данном коде. - Наследования: один класс строиться на основе другого. Один будет родительским, другой будет дочерним.
Дочерный класс получаке все от родительского: все атрибуты, все функции. - Инакпсуляция: в программирование воспринимается двояко:
- Фундаментально - инкопсуляция это "Инкапсула" мы в класс должны поместить все атрибуты и методы связанные общей
идеей, мы их инкапсулируем в класс и от класса работаем с этим всем. - Про сокрытие данных, то что у нас в классе должны быть протектные и приватные атрибуты. Из класса не должно
торчать наружу, все то, что не должно оттуда торчать. Необходимо представлять наружу интерфейс, только тот,
который потребуется пользователю.
- Фундаментально - инкопсуляция это "Инкапсула" мы в класс должны поместить все атрибуты и методы связанные общей
- Полиморфизм: тоже понимается двояко:
- Каноничный подход это параметрический полиморфизм, он говорит о том, что в функциях нам плевать на типы
данных, которые прилетают к нам из вне. Главное, чтобы внтри функции, когда идет работа с этим аргументом,
в этом аргументе должен быть весь интерфейс, с которым мы работаем. Чтобы этот аргумент умел все теже действия,
которые мы у него используем. Сейчас это принято называть утиной типизацией. - Полиморфим представляет из себя, то что мы используем одни и те же имена вот в этой все структуре, за счет того,
что мы можем в дочерних классах перегружать родительские методы, тем самым модифицируя их функионал.
- Каноничный подход это параметрический полиморфизм, он говорит о том, что в функциях нам плевать на типы
Кааноническое наследование говорит нам о том, что есть родительский класс, а есть дочерний. Дочерний класс берет все
характеристики родительского. По сути дочерние классы являются теми же родительскими. Например мы берем классс
Животные, от него наследуюется класс Кошка. Кошка она по сути и есть животное. Но миксины ломают эту парадигму.
Миксины это какие-то мелкие классы, которые реализуют какой-то не сильно большой функционал, буквально пару
функций, несколько атрибутов. Необольшие классы, они нам нужны для того, что их функционал требуется во многих
классах. И там, где нам нужен этот мелкий функционал. Принято называть этот мелкий класс миксин. С английского
переводиться "Примесь"
Пайтон поддерживает механизм множественного наследования.
В пайтон существует MRO. Он создает жесткий порядок зависимостей.
MRO различаются в Python 2 и Python 3.
Во второй версии был алгоримт поиска в глубину. Сначала по-левой ветке до конца, потом по-правой.
В третьей весрии у нас используется алгоритм поиска в ширину.
MRO это просто список, который содержится внтури класса, его можно постмотреть вызвав
print(D.mro())
- Итератор это такая структура данных, которая может отдавать что-то одно по одному.
- Итерируемый объект это объект, по которому можно пройтись по элементно.
- В пайтоне итератор реализуется с помощью двух методов класса iter и next. iter возвращает ссылку на итератор,
а next возвращает просто следующий объект это последовательности. Почему два метода? Эти два метода можно
разнести по разным классам. У вас может быть два класса. У первого класса может быть только один метод iter,
в "итере" можеть быть прописано внутри вернуть объект другого класса. А в другом классе будет только next
Что такое корутина? Что такое asyncи await? Какие модули в Pythonесть для тестирования? Какие отличия, плюсы и минусы? Unittest Pytest Что такое mock? Зачем нужен? Какие есть типы асинхронного выполнения? какие библиотеки работают с асинхронным выполнением кода, в чем между ними разница что такое ORM. С какими работал? SQLAlchemy Что такое GIL, какие проблемы он решает, плюсы и минусы чем отличаются относительные импорты от абсолютных
Best practices SOLID, KISS, DRY, YAGNI Какие знаешь паттерны проектирования, какие использовал Conflictmanagement SDLC
Databases Какие NoSQL базы данных знаешь, с какими работал, кейсы использования, плюсы и минусы Какие SQL базы данных знаешь, с какими работал, кейсы использования, плюсы и минусы PK, FK Типы связей? Как реализуется связь много ко многим Зачем нужны индексы? Зачем нужны триггеры? Что такое транзакция? ACID Уровни изолированности транзакции
Tools and Cloud Git JIRA docker AWS
WEB Веб-фреймворки REST (RESTful)
Микросервисы и монолит linux