Uploaded by Роман Соколов

ООП: Введение

advertisement
Создание простого класса с атрибутами класса
setattr(class_name or object_name, ‘attr_name’, value) - функция позволяет
добавить/обновить атрибут с указанным значением
getattr(class_name or object_name, ‘attr_name’, True or False) - функция позволяет
получить значение указанного атрибута. Если стоит False, то при отсутствии
указанного атрибута не выпадет ошибка.
hasattr(class_name or object_name, ‘attr_name’) - функция позволяет узнать
существует ли указанный атрибут. Возвращает булевое значение.
delattr(class_name or object_name, ‘attr_name’) - функция позволяет удалить
выбранный атрибут, если такой существует. Иначе выпадет ошибка.
__doc__ - содержит строку с описанием класса
__dict__ - содержит набор атрибутов и их значений в экземпляре класса
Объекты класса образуют свое пространство имен – пространство имен экземпляров
класса. Объекты не содержат никаких собственных атрибутов. Свойства класса
принадлежат непосредственно классу Point и находятся в нем, а объекты a и b лишь
имеют ссылки на эти атрибуты класса. То есть, атрибуты класса – общие для всех его
экземпляров.
Для создания поля класса необходимо перед новой переменной указать self.
Создание методов класса
При создании метода ему автоматически передаётся аргумент с содержанием self,
который является ссылкой на экземпляр класса. Поэтому первым аргументом нужно
прописывать self, для того чтобы значение передавалось в этот аргумент.
*Значение ссылки на объект класса*
При применении методов класса к атрибутам класса в объекте, будут изменены
атрибуты класса (изменение для всех объектов)
Для инициализации полей (без использования __init__) можно использовать lazy
loading - инициализация полей из метода. (Например, через self.__dict__ или setattr())
__INIT__ и __DEL__
Метод класса __init__ вызывается при инициализации объекта. С его помощью можно
задать поля, которые будут использоваться в объекте.
Чтобы передать в метод значения для аргументов их нужно прописывать при создании
объекта в круглых скобках после названия класса.
Метод класса __del__ вызывается при удалении объекта (когда сборщик мусора языка
python удаляет объект из адресного пространства).
Удаляется объект тогда, когда на объект в адресном пространстве не ссылается
никакая переменная. Например при переназначении переменной. Метод вызывается
когда объект существует, но после удаления объекта этот метод пропадает вместе с
ним.
Если нужно присвоить переменную, которая не будет изменяться внутри объекта
извне, то нужно копировать переменную (Например, использовать метод copy() или
self.data = data[:] в случае со списком)
Магический метод __new__.
Пример паттерна Singleton.
Метод класса __new__ вызывается перед созданием объекта класса.
При инициализации метода вместо self пишется cls.
self - ссылка на объект.
cls - ссылка на класс.
Метод __new__ обязательно должен возвращать ссылку на созданный объект. Для
этого следует прописать в возвращаемом значении:
super().__new__(cls)
Все классы автоматически наследуются от класса object.
При вызове функции super() возвращается ссылка на базовый класс. При вызове
метода __new__(cls), запускается процесс создания экземпляра класса.
Идет обращение к базовому классу, из которого вызывается конструктор - метод
__new__(cls) с аргументом cls - ссылки на текущий класс, для которого создается
экземпляр класса
*args, **kwargs - прописываются в обязательном порядке, так как без них нельзя будет
передать аргументы экземпляру класса.
Singleton - паттерн проектирования, при котором у класса может быть лишь один
экземпляр.
Пример реализация паттерна Singleton с удалением переопределением полей класса:
Интересное решение задачи:
super().__new__(для создания объекта класса указанного в скобках)
Download