общие свойства объектов в языке программирования.
ООП строится вокруг четырёх основных принципов: абстракция, инкапсуляция, наследование и полиморфизм.
- Инкапсуляция
Доступ к данным объекта должен контролироваться, чтобы пользователь не мог изменить их в произвольном порядке и что-то поломать. Поэтому для работы с данными программисты пишут методы, которые можно будет использовать вне класса и которые ничего не сломают внутри. - Наследование
Классы могут передавать свои атрибуты и методы классам-потомкам. - Полиморфизм
Этот принцип позволяет применять одни и те же команды к объектам разных классов, даже если они выполняются по-разному. - Абстракция
При создании класса мы упрощаем его до тех атрибутов и методов, которые нужны именно в этом коде, не пытаясь описать его целиком и отбрасывая всё второстепенное.
Class
-данные(свойства)
prop = ‘value’
- методы(действия)
def get_prop(self, x, y):
self.x = x
self.y = y
Добавить св-во
Сlass.prop = ‘value’
setattr(Class, ‘prop’, ‘value’)
Читать св-во
c = Сlass.prop - если нет св-ва, возвращает ошибку
getattr(Class, prop, False) - если нет св-ва, возвращает третий аргумент
Наличие св-ва
hasattr(Class, prop) - учитывает наследование
**Удалить св-во
del Сlass.prop - если нет св-ва, возвращает ошибку
delattr(Class, prop) - если нет св-ва, возвращает ошибку
Пространство имен
Class.dict
Все свойства экз.класса
dir(obj)
Описание класса, комментарий
Class.doc
Метод класса
@classmethod - работает с атрибутами класса
def method_a(cls, arg):
return cls.x
Статический метод
@staticmethod - независимая, сервисная функция; нет дополнительных параментров, кроме тех, которые указываем; не имеют доступа к атрибутам класса и к атрибутам экз.класса; можем вызыват внутри обычных методов
def method_b(x, y): return xx + yy
Режим доступа (механизм инкапсуляции)
attr - публичное свойство
_attr - режим доступа protected
__attr - режим доступа private
pip install accessify - защитить методы от внешнего доступа
Магические методы - методы, которые вызываются интерпретатором для выполнения различных операций над объектами.
Метод | Что делает |
---|---|
new(cls) return super().new(cls) | Создание объекта cls ссылается на текущий класс должен возвращать адрес нового созданного объекта |
init(self) | Инициализатор объекта |
del(self) | Финализатор объекта |
setattr(self, key, value) | Автоматически вызывается при изменении свойства key класса |
getattribute(self, item) | Автоматически вызывается при получении свойства класса с именем item |
getattr(self, item) | Автоматически вызывается при получении несуществующего свойства item класса |
delattr(self, item) | Автоматически вызывается при удалении свойства item (не важно существует оно или нет) |
сall(self, *args, **kwargs) | Позволяет экземплярам класса вести себя так, как будто они функции |
str(self) | Для отображения информации об объекте класса для пользователей |
repr(self) | Для отображения информации об объекте класса в режиме отладки |
len(self) | Позволяет применить функцию len() к экземпляру класса |
abs(self) | Позволяет применить функцию abs() к экземпляру класса |
add(self) | Для операции сложения |
sub(self) | Для операции вычитания |
mul(self) | Для операции умножения |
truediv(self) | Для операции деления |
eq(self) | Для равенства == |
ne(self) | Для неравенства != |
lt(self) | Для оператора < |
le(self) | Для оператора <= |
gt(self) | Для оператора > |
ge(self) | Для оператора >= |
hash(self) | Вычисляется хэш экземпляра класса |
bool(self) | Используется в программах, где требуется описать собственные проверки истинности или ложности объектов |
getitem(self, item) | Получение значения по ключу item |
setitem(self, key, value) | Запись значения value по ключу key |
delitem(self, key) | Удаление элемента по ключу key |
iter(self) | Получение итератора для перебора объекта |
next(self) | Переход к следующему значению и его считывание |
Oбъект-свойство property
объект-свойство property
prop = property (getter, setter)
@property
def name(self):
return self.__name@name.setter
def name(self, name):
self.__name = name@name.deleter
def name(self):
del self.__name | Для работы с приватными локальными свойствами экземпляров классов
коллекция slots
slots = (’x’, ‘y’) | Ограничивает допустимый набор имен атрибутов объекта только перечисленными именами
- ограничение создаваемых локальных свойств
- уменьшение занимаемой памяти, атрибут dict удаляется
- ускорение работы с локальными свойствами