Just Python
10.2K subscribers
4.39K photos
11 videos
4.38K links
🐍Простое изучение Python.

Ссылка: @Portal_v_IT

Сотрудничество: @oleginc, @tatiana_inc

Канал на бирже: telega.in/c/justpython_it

РКН: clck.ru/3MnbSc
Download Telegram
Как начать отладку при утечке памяти в рабочем приложении

Для отладки утечек памяти в Python можно использовать инструменты, такие как Memory Profiler или objgraph.
Запустите вашу программу с помощью команды python -m memory_profiler my_script.py. Будет выведен подробный отчет о том, сколько памяти используется в каждой строке программы, а также общее использование памяти и любые утечки.
Этот код создаст изображение my_list.png, на котором будут показаны все объекты, на которые ссылается my_list, а также все объекты, которые ссылается на них. Это может помочь вам понять, какие объекты держат ссылки на ваши объекты и могут вызывать утечки памяти.

#theory // just python | ChatGPT
В каких ситуациях возникает исключение NotImplementedError

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

#theory // just python | ChatGPT
Генераторные фунции (generator functions)

Если предикатов фильтрации или обработчиков элементов списка много, то удобнее использовать генераторы. Они могут не дать прироста скорости, но помогут сэкономить память.

Генераторной фунцией в python называется функция, которая ведет себя как итератор. Для определения генераторной функции нужно использовать ключевое слово yield.

#theory // just python | ChatGPT
Создание и удаление объектов

Любое описание объекта в объектно-ориентированном программировании начинается с создания объекта и его удаления.

new(cls[, ...]) — метод создания типа класса. Он принимает первым аргументом тип класса, в котором он вызывается, и, как правило, возвращает этот же тип. В основном используется, чтобы настраивать создание экземпляра класса тех объектов, которые наследуются от неизменяемых типов (например, int, str, или tuple).

init(self[, ...]) — конструктор класса. Используется при определении объектов.

init_subclass(cls) — позволяет переопределить создание подклассов объекта.

#theory // just python | ChatGPT
Конструктор

Метод, который вызывается при создании объектов, в ООП зовётся конструктором. Он нужен для объектов, которые изначально должны иметь какие-то значение. Например, пустые экземпляры класса "Студент" бессмысленны, и желательно иметь хотя бы минимальный обозначенный набор вроде имени, фамилии и группы.

В качестве Питоновского конструктора выступает метод init()

#theory // just python | ChatGPT
Методы сравнения объектов между собой (ч.1)

Метод lt(self, other) в Python позволяет определить порядок сортировки объектов при использовании встроенных функций сортировки, таких как sorted(). При реализации этого метода в классе можно указать, какие атрибуты объекта должны учитываться при сравнении с другими объектами для определения их относительного порядка.

Например, предположим, что у нас есть класс Point, который представляет собой точку на плоскости и имеет атрибуты x и y. Мы можем определить метод lt(self, other) в классе Point, чтобы при сравнении двух точек учитывался их порядок по оси x, а в случае равенства координат по оси x - по оси y.

#theory // just python | ChatGPT
Методы сравнения объектов между собой (ч.2)

Метод le(self, other) позволяет определить, каким образом объект вашего класса должен вести себя, когда сравнивается с другим объектом с помощью оператора "<=". Например, если вы хотите сравнивать объекты вашего класса по каким-то определенным критериям (например, по их атрибутам), вы можете переопределить метод le(self, other) таким образом, чтобы он возвращал True, если объект self меньше или равен объекту other в соответствии с этими критериями, и False в противном случае.

#theory // just python | ChatGPT
Методы сравнения объектов между собой (ч.3)

Метод eq(self, other) предназначен для определения поведения оператора сравнения "==" для объектов определенного класса. Этот метод позволяет сравнивать два объекта и определять, равны ли они друг другу.

#theory // just python | ChatGPT
Методы сравнения объектов между собой (ч.4)

Метод ne(self, other) позволяет определить, какие условия должны выполняться для того, чтобы два объекта вашего класса были считаны не равными. В приведенном примере, если хотя бы одна из координат x или y точек отличается, то точки считаются не равными.
Таким образом, использование метода ne(self, other) позволяет гибко управлять сравнением объектов вашего класса и определять, какие именно параметры считать при сравнении.

#theory // just python | ChatGPT
Методы сравнения объектов между собой (ч.5)

Метод gt(self, other) вызывается при выполнении операции сравнения "больше" (>). Этот метод позволяет определить, какой из двух объектов больше с точки зрения вашего класса. Например, если у вас есть класс Person с атрибутом age, вы можете определить метод gt(self, other), чтобы сравнивать людей по их возрасту.

#theory // just python | ChatGPT
Методы сравнения объектов между собой (ч.6)

В данном примере мы создаем класс Item, у которого есть атрибут value. Метод ge(self, other) определяет поведение оператора >= для сравнения двух объектов типа Item по их значениям. Когда мы пишем item1 >= item2, вызывается метод item1.ge(item2), который сравнивает значения атрибутов value у обоих объектов и возвращает соответствующий результат сравнения.

Этот лайфхак позволяет более гибко управлять сравнением объектов в Python и добавляет возможность определить собственное поведение для оператора >= в контексте вашего класса.

#theory // just python | ChatGPT
Методы сравнения объектов между собой (ч.7)

В данном примере класс Person определен с атрибутами name и age. Метод hash(self) переопределен для этого класса, чтобы генерировать уникальный хэш на основе значений его атрибутов.

При создании объектов person1 и person3 с одинаковыми значениями атрибутов name и age, у них будет одинаковый хэш, что демонстрирует работу метода hash.

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

#theory // just python | ChatGPT
Методы сравнения объектов между собой (ч.8)

bool(self) — вызывается функцией bool(...) и возвращает True или False в соответствии с реализацией. Если данный метод не реализован в объекте, и объект является какой-либо последовательностью (списком, кортежем и т.д.), вместо него вызывается метод len. Используется, в основном, в условиях if.

#theory // just python | ChatGPT
Как в Python создать класс

В Python классы и объекты по смыслу не отличаются от других языков. Нюансы в реализации. Для создания класса в Питоне необходимо написать инструкцию class, а затем выбрать имя.

Для именования классов в Python обычно используют стиль "camel case", где первая буква — заглавная.

#theory // just python | ChatGPT
Общие свойства объектов (ч.1)

Любой объект может содержать дополнительную информацию, полезную при отладке или приведении типов.

repr(self) — информационная строка об объекте. Выводится при вызове функции repr(...) или в момент отладки.

#theory // just python | ChatGPT
Общие свойства объектов (ч.2)

str(self) — вызывается при вызове функции str(...), возвращает строковый объект.

#theory // just python | ChatGPT
Наследование

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

Мы все прекрасно знаем, что котики, к примеру, любят всё ронять, а собакены — рыть землю. Создадим два соответствующих класса-наследника.

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

#theory // just python | ChatGPT
Что не так с этим кодом и зачем это нужно

Этот код вызывает ошибку утверждения assert с сообщением «error», если debug равен True. debug — это встроенная переменная Python, которая является истинной, если к интерактивной консоли или скрипту был присоединен флаг оптимизации -O. Для типичных скриптов в режиме отладки эта переменная равна True. Если оптимизация включена, то интерпретатор Python игнорирует все операторы утверждения assert, поэтому этот код не вызовет ошибку в optimized mode.

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

#theory // just python | ChatGPT
Создание последовательностей (ч.1)

В данном примере класс CustomList содержит метод len(self), который возвращает длину списка self.items, используемого внутри объекта. Когда мы вызываем функцию len(my_list) для объекта my_list, вызывается метод my_list.len(), который возвращает текущую длину списка.

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

#theory // just python | ChatGPT
Создание последовательностей (ч.2)

getitem(self, key) — вызывается при обращении к элементу в последовательности по его ключу (индексу). Метод должен выбрасывать исключение TypeError, если используется некорректный тип ключа, KeyError, если данному ключу не соответствует ни один элемент в последовательности.

#theory // just python | ChatGPT