Объекты и классы в python
Объекты
Объекты - пользовательская структура данных, содержащая как данные (переменные, называемые атрибутами класса), так и код (функции, называемые методами класса).
Создание новых объектов
Чтобы создать объект, нужно сначала создать класс, который укажет, что в объекте содержится. Создается новый класс ключевым словом class
.
Для примера создаю пустой класс (как самый простой пример):
А создать объект из класса можно так:
In this case создадутся два отдельных объекта класса Cat
с именами a_cat
и another_cat
.
Атрибуты
Атрибут - переменная внутри класса/объекта.
Во время и после создания класса/объекта можно им просвоить атрибуты.
Атрибутом может быть любой другой объект.
По умолчанию, вывод объектов на экран такой (ибо при создании класса ты не указывал в каком виде ему выводиться):
Задать атрибуты объекту можно так:
А получить к ним доступ:
Методы
Метод - функция класса/объекта.
Инициализация объекта
Если нужно присвоить артибуты объекту во время его создания, юзай специальный метод инициализации
__init__
(обычная функция).
Его следует рассматривать, как средство инициализации.
__init__
- особое имя метода, который инициализирует отдельный объект с помощью определения его класса. А аргументself
просто указывает на сам объект.
Когда указываешь__init__
в определении класса, его первым параметром должен быть объект с именемself
.self
, кстати, не является в Python зарезервированным словом, но юзают часто.
В коде выше второе определение класса Cat
создает объект, который ничего не делает, поэтому добавь в него параметр какой-нибудь:
Теперь можно создать объект класса Cat и сразу передать ему строку для параметра name
:
Это строка:
- выполняет поиск определения класса
Cat
- инстанцирует (создает) новый объект в памяти
- вызывает метод объекта
__init__
, передавая только что созданный объектself
и другой аргумент("Shrumpy")
в качестве значения параметраname
- сохраняет в объекте значение переменной
name
- возвращает новый объект
- прикрепляет к объекту переменную
furball
name
был сохранен как атрибут объекта, поэтому можно к нему обратиться непосредтсвенно:
Внутри определения класса
Cat
получаешь доступ к атрибутуname
с помощьюself.name
. А когда создаешь реальный объект и присваиваешь его переменной (furball
, например), то ссылаешься на этот атрибут уже какfurball.name
Не обязательно иметь метод__init__
для каждого класса - его юзают, чтобы различать объекты одно класса.
В python всё является объектом
Ты можешь создать много отдельных объектов из одного класса. Но помни, что в python данные реализованы как объекты, то есть и сам класс является объектом.
Однако может существовать только один объект для каждого класса, то есть, если классCat
уже определен, то второй такой класс создать не получится.
Соус: Книга “Простой Python” → Глава 10. “Ой-ой-ой: объекты и классы”