|
1 |
| -# Python--Object-Oriented-Programming |
| 1 | +# Python ОПП (Object Oriented Programming) |
| 2 | +общие свойства объектов в языке программирования. |
| 3 | + |
| 4 | +ООП строится вокруг четырёх основных принципов: абстракция, инкапсуляция, наследование и полиморфизм. |
| 5 | +- **Инкапсуляция** |
| 6 | +Доступ к данным объекта должен контролироваться, чтобы пользователь не мог изменить их в произвольном порядке и что-то поломать. Поэтому для работы с данными программисты пишут методы, которые можно будет использовать вне класса и которые ничего не сломают внутри. |
| 7 | +- **Наследование** |
| 8 | +Классы могут передавать свои атрибуты и методы классам-потомкам. |
| 9 | +- **Полиморфизм** |
| 10 | +Этот принцип позволяет применять одни и те же команды к объектам разных классов, даже если они выполняются по-разному. |
| 11 | +- **Абстракция** |
| 12 | +При создании класса мы упрощаем его до тех атрибутов и методов, которые нужны именно в этом коде, не пытаясь описать его целиком и отбрасывая всё второстепенное. |
| 13 | +____ |
| 14 | + |
| 15 | +**Class |
| 16 | +-данные(свойства) |
| 17 | +> prop = ‘value’ |
| 18 | +- методы(действия) |
| 19 | +> def get_prop(self, x, y): |
| 20 | +> self.x = x |
| 21 | +> self.y = y |
| 22 | +> |
| 23 | +
|
| 24 | +**Добавить св-во |
| 25 | +> Сlass.prop = ‘value’ |
| 26 | +> setattr(Class, ‘prop’, ‘value’) |
| 27 | +
|
| 28 | +**Читать св-во |
| 29 | +> c = Сlass.prop - если нет св-ва, возвращает ошибку |
| 30 | +> getattr(Class, prop, False) - если нет св-ва, возвращает третий аргумент |
| 31 | +
|
| 32 | +**Наличие св-ва |
| 33 | +> hasattr(Class, prop) - учитывает наследование |
| 34 | + |
| 35 | +**Удалить св-во |
| 36 | +> del Сlass.prop - если нет св-ва, возвращает ошибку |
| 37 | +> delattr(Class, prop) - если нет св-ва, возвращает ошибку |
| 38 | +
|
| 39 | +**Пространство имен |
| 40 | +> Class.__dict__ |
| 41 | +
|
| 42 | +**Все свойства экз.класса |
| 43 | +> dir(obj) |
| 44 | +
|
| 45 | +**Описание класса, комментарий |
| 46 | +> Class.__doc__ |
| 47 | +
|
| 48 | +**Метод класса** |
| 49 | +> @classmethod - работает с атрибутами класса |
| 50 | +> def method_a(cls, arg): |
| 51 | +> return cls.x |
| 52 | +> |
| 53 | +
|
| 54 | +**Статический метод** |
| 55 | +> @staticmethod - независимая, сервисная функция; нет дополнительных параментров, кроме тех, которые указываем; не имеют доступа к атрибутам класса и к атрибутам экз.класса; можем вызыват внутри обычных методов |
| 56 | +> def method_b(x, y): |
| 57 | +> return x*x + y*y |
| 58 | +> |
| 59 | +
|
| 60 | +**Режим доступа (механизм инкапсуляции) |
| 61 | +> attr - публичное свойство |
| 62 | +> _attr - режим доступа protected |
| 63 | +> __attr - режим доступа private |
| 64 | +
|
| 65 | +> pip install accessify - защитить методы от внешнего доступа |
| 66 | +____ |
| 67 | + |
| 68 | +**Магические методы - методы, которые вызываются интерпретатором для выполнения различных операций над объектами. |
| 69 | + |
| 70 | +| Метод | Что делает | |
| 71 | +|----------------:|----------------:| |
| 72 | +| __new__(cls) |
| 73 | + return super().__new__(cls) | Создание объекта cls ссылается на текущий класс должен возвращать адрес нового созданного объекта | |
| 74 | +| __init__(self) | Инициализатор объекта | |
| 75 | +| __del__(self) | Финализатор объекта | |
| 76 | +| __setattr__(self, key, value) | Автоматически вызывается при изменении свойства key класса | |
| 77 | +| __getattribute__(self, item) | Автоматически вызывается при получении свойства класса с именем item | |
| 78 | +| __getattr__(self, item) | Автоматически вызывается при получении несуществующего свойства item класса | |
| 79 | +| __delattr__(self, item) | Автоматически вызывается при удалении свойства item (не важно существует оно или нет) | |
| 80 | +| __сall__(self, *args, **kwargs) | Позволяет экземплярам класса вести себя так, как будто они функции | |
| 81 | +| __str__(self) | Для отображения информации об объекте класса для пользователей | |
| 82 | +| __repr__(self) | Для отображения информации об объекте класса в режиме отладки | |
| 83 | +| __len__(self) | Позволяет применить функцию len() к экземпляру класса | |
| 84 | +| __abs__(self) | Позволяет применить функцию abs() к экземпляру класса | |
| 85 | +| __add__(self) | Для операции сложения | |
| 86 | +| __sub__(self) | Для операции вычитания | |
| 87 | +| __mul__(self) | Для операции умножения | |
| 88 | +| __truediv__(self) | Для операции деления | |
| 89 | +| __eq__(self) | Для равенства == | |
| 90 | +| __ne__(self) | Для неравенства != | |
| 91 | +| __lt__(self) | Для оператора < | |
| 92 | +| __le__(self) | Для оператора <= | |
| 93 | +| __gt__(self) | Для оператора > | |
| 94 | +| __ge__(self) | Для оператора >= | |
| 95 | +| __hash__(self) | Вычисляется хэш экземпляра класса | |
| 96 | +| __bool__(self) | Используется в программах, где требуется описать собственные проверки истинности или ложности объектов | |
| 97 | +| __getitem__(self, item) | Получение значения по ключу item | |
| 98 | +| __setitem__(self, key, value) | Запись значения value по ключу key | |
| 99 | +| __delitem__(self, key) | Удаление элемента по ключу key | |
| 100 | +| __iter__(self) | Получение итератора для перебора объекта | |
| 101 | +| __next__(self) | Переход к следующему значению и его считывание | |
| 102 | + |
| 103 | +____ |
| 104 | + |
| 105 | +**Oбъект-свойство property |
| 106 | +| объект-свойство property |
| 107 | +1. prop = property (getter, setter) |
| 108 | + |
| 109 | +2. @property |
| 110 | + def name(self): |
| 111 | + return self.__name |
| 112 | + |
| 113 | + @name.setter |
| 114 | + def name(self, name): |
| 115 | + self.__name = name |
| 116 | + |
| 117 | + @name.deleter |
| 118 | + def name(self): |
| 119 | + del self.__name | Для работы с приватными локальными свойствами экземпляров классов | |
| 120 | +| коллекция __slots__ |
| 121 | +__slots__ = (’x’, ‘y’) | Ограничивает допустимый набор имен атрибутов объекта только перечисленными именами |
| 122 | +- ограничение создаваемых локальных свойств |
| 123 | +- уменьшение занимаемой памяти, атрибут __dict__ удаляется |
| 124 | +- ускорение работы с локальными свойствами | |
| 125 | +____ |
| 126 | + |
| 127 | +**Метакласс: |
| 128 | +![]() |
2 | 129 |
|
3 | 130 |
|
4 | 131 | [ОOП Python :point_left:](https://github.com/Dv-nn/Python--Object-Oriented-Programming/blob/main/ОOП_Python.pdf)
|
|
0 commit comments