Что такое init python
init в Python
Давайте посмотрим на короткий фрагмент кода:
Что делает метод инициализации?
Когда создается новый экземпляр класса в python, вызывается метод __init__, который оказывается очень хорошим местом, где мы можем изменить объект после его создания.
Это означает, что когда мы создаем новый экземпляр класса, например:
Является ли __Init__ конструктором?
На самом деле да. __init__ — это конструкция oop. __init__ – это конструктор класса. Как упоминалось выше, метод __init__ вызывается, как только выделяется память для объекта. Посмотрим, что мы сделали выше в нашем фрагменте:
Использование self важно, например:
Параметр something будет храниться в переменных в стеке и будет отброшен, как только метод __init__ выйдет за пределы области видимости.
Как __init__ работает с наследованием?
Когда у нас есть класс, наследующий от суперкласса, метод __init__ работает таким же образом. Давайте попробуем продемонстрировать, что происходит, когда мы пытаемся инициализировать дочерний класс:
В приведенном выше коде, когда мы инициализировали объект Student, это будет результат, который создается при запуске указанной выше программы:
Итак, перед дочерним классом был вызван родительский класс init. Вы можете контролировать это, изменяя порядок, в котором init вызывается для родительского или дочернего класса.
Заключение
Подводя итог, __init__ в python – это то, что называется конструктором в других языках ООП, таких как C ++ и Java. Основная идея заключается в том, что это специальный метод, который автоматически вызывается при создании объекта этого класса.
Метод конструктора __init__ в Python
«__init__» — зарезервированный метод в классах Python. Он известен как конструктор в концепциях ООП. Этот метод вызывается, когда объект создается из класса, и он позволяет классу инициализировать атрибуты класса.
Как мы можем использовать «__init__»?
Задача функции конструктора класса Python — инициализировать экземпляр класса.
Синтаксис функции Python __init __()
Давайте рассмотрим, что мы создаем класс с именем Car. У автомобиля могут быть такие атрибуты, как «цвет», «модель», «скорость» и т. Д., А также такие методы, как «старт», «ускорение», «переключение передач» и т. Д.
Поэтому мы использовали метод __init__ конструктора для инициализации атрибутов класса.
Примеры
Давайте посмотрим на несколько примеров функции конструктора в разных сценариях.
1. Класс без конструктора
Мы можем создать класс без определения конструктора. В этом случае вызывается конструктор суперкласса для инициализации экземпляра класса. Класс object — это основа всех классов в Python.
Вот еще один пример, подтверждающий, что конструктор суперкласса вызывается для инициализации экземпляра подкласса.
2. Простой конструктор без аргументов
Мы можем создать конструктор без аргументов. Это полезно для целей ведения журнала, таких как подсчет экземпляров класса.
3. Конструктор классов с аргументами
В большинстве случаев вы найдете функцию-конструктор с некоторыми аргументами. Эти аргументы обычно используются для инициализации переменных экземпляра.
4. Конструктор классов с наследованием
5. Цепочка конструкторов с многоуровневым наследованием
6. С множественным наследованием
Мы не можем использовать super() для доступа ко всем суперклассам в случае множественного наследования. Лучшим подходом было бы вызвать функцию конструктора суперклассов, используя их имя класса.
Python не поддерживает несколько конструкторов
Python не поддерживает несколько конструкторов, в отличие от других популярных объектно-ориентированных языков программирования, таких как Java.
Мы можем определить несколько методов __init __(), но последний из них переопределит предыдущие определения.
Может ли функция Python __init __() что-то вернуть?
Если мы попытаемся вернуть значение, отличное от None, из функции __init __(), это вызовет ошибку TypeError.
Если мы изменим оператор return на return None тогда код будет работать без каких-либо исключений.
Использование метода __init__
Давайте поговорим о методе __init__ и для чего он используется в Python.
Введение
Когда вы создаете новый класс в Python, первым методом, который вы, скорее всего, создадите, будет метод __init__.
Метод __init__ позволяет принимать аргументы для вашего класса.
Что еще более важно, метод __init__ дает возможность назначать начальные значения различным атрибутам экземпляров класса.
Более подробно ознакомиться с классами можно в официальной документации Python.
Возьмем конкретный пример и внимательно его рассмотрим.
Создание класса
Создадим класс под названием Test
Я могу построить новый экземпляр этого класса, вызвав его следующим образом:
У нас есть экземпляр класса Test, но этот класс Test на самом деле не имеет точки запуска, потому что он не имеет никакой функциональности (он не хранит никаких полезных данных или не имеет никаких методов).
Я мог бы вручную добавлять атрибуты к экземпляру класса Test, чтобы хранить на них некоторые данные, как показано ниже:
Но делать это было бы немного глупо.
Было бы лучше, если бы мы могли каким-то образом вызвать этот класс с аргументами для автоматического хранения атрибутов.
Использование инициализатора
Теперь, если я попытаюсь вызвать этот класс с аргументами, то мы увидим ошибку:
Чтобы принимать аргументы, нам нужно определить метод __init__ в нашем классе:
Первым аргументом в нашем методе __init__ всегда будет self (как и почти во всех других методах). После этого нам нужно объявить любые аргументы, которые мы хотим, чтобы наш класс принял.
Главное, что вы почти всегда увидите в методе __init__ — это присвоение атрибутов.
Это наш новый класс Point:
Если я назову его так же, как раньше, без каких-либо аргументов, то мы увидим ошибку, потому что этот класс теперь требует двух аргументов — x и y:
Нужно дать нашему классу Test два аргумента, чтобы получить новый экземпляр этого класса:
Этот объект Point теперь имеет атрибут x и атрибут y:
Это означает, что наш метод __init__ был вызван!
Заключение
Всякий раз, когда вы вызываете класс, Python создает новый экземпляр этого класса, а затем вызывает метод __init__ этого класса, передавая вновь созданный экземпляр в качестве первого аргумента self.
В отличие от многих языков программирования, __init__ не называется «Методом конструктора».
Метод __init__ называется «Методом инициализатора». Метод инициализирует наш новый экземпляр класса. Таким образом, к тому моменту, когда метод инициализатора называется экземпляром класса, он уже является построенным.
Работа с конструкторами в Python
Что такое конструктор в Python?
Конструктор в Python – это особый тип метода (функции), который используется для инициализации членов экземпляра класса.
В C ++ или Java конструктор имеет то же имя, что и его класс, в Python конструктор обрабатывается по-разному. Он используется для создания объекта.
Конструкторы бывают двух типов:
Определение конструктора выполняется, когда мы создаем объект этого класса. Конструкторы также проверяют, что у объекта достаточно ресурсов для выполнения любой задачи запуска.
Создание конструктора на Python
В Python метод __init __() имитирует конструктор класса. Этот метод вызывается при создании экземпляра класса. Он принимает ключевое слово self в качестве первого аргумента, который позволяет получить доступ к атрибутам или методу класса.
Мы можем передать любое количество аргументов во время создания объекта класса, в зависимости от определения __init __(). В основном он используется для инициализации атрибутов класса. У каждого класса должен быть конструктор, даже если он просто полагается на конструктор по умолчанию.
Рассмотрим следующий пример для инициализации атрибутов класса Employee при работе с конструкторами в Python.
Подсчет количества объектов класса
Конструктор вызывается автоматически, когда мы создаем объект класса. Рассмотрим следующий пример.
Непараметрический
Непараметрический конструктор используется, когда мы не хотим манипулировать значением, или конструктором, который имеет только self в качестве аргумента. Разберем на примере.
Параметризованный конструктор Python
У параметризованного конструктора есть несколько параметров вместе с самим собой.
Конструктор Python по умолчанию
Когда мы не включаем конструктор в класс или забываем его объявить, он становится конструктором по умолчанию. Он не выполняет никаких задач, а инициализирует объекты. Рассмотрим пример.
Более одного конструктора в одном классе
Давайте посмотрим на другой сценарий, что произойдет, если мы объявим два одинаковых конструктора в классе.
В приведенном выше коде объект st вызвал второй конструктор, тогда как оба имеют одинаковую конфигурацию. Первый метод недоступен для объекта st. Внутренне объект класса всегда будет вызывать последний конструктор, если у класса есть несколько конструкторов.
Примечание. Перегрузка конструктора в Python запрещена.
Встроенные функции классов Python
Встроенные функции, определенные в классе, описаны в следующей таблице.
SN | Функция | Описание |
---|---|---|
1 | getattr(obj,name,default) | Используется для доступа к атрибуту объекта. |
2 | setattr(obj, name,value) | Она используется для установки определенного значения для определенного атрибута объекта. |
3 | delattr (obj, name) | Необходима для удаления определенного атрибута. |
4 | hasattr (obj, name) | Возвращает истину, если объект содержит определенный атрибут. |
Встроенные атрибуты класса
Наряду с другими атрибутами класс Python также содержит некоторые встроенные атрибуты класса, которые предоставляют информацию о классе.
Встроенные атрибуты класса приведены в таблице ниже.
Конструктор класса – метод __init__()
В объектно-ориентированном программировании конструктором класса называют метод, который автоматически вызывается при создании объектов. Его также можно назвать конструктором объектов класса. Имя такого метода обычно регламентируется синтаксисом конкретного языка программирования. Так в Java имя конструктора класса совпадает с именем самого класса. В Python же роль конструктора играет метод __init__().
В Python наличие пар знаков подчеркивания спереди и сзади в имени метода говорит о том, что он принадлежит к группе методов перегрузки операторов. Если подобные методы определены в классе, то объекты могут участвовать в таких операциях как сложение, вычитание, вызываться как функции и др.
При этом методы перегрузки операторов не надо вызывать по имени. Вызовом для них является сам факт участия объекта в определенной операции. В случае конструктора класса – это операция создания объекта. Так как объект создается в момент вызова класса по имени, то в этот момент вызывается метод __init__().
Необходимость конструкторов связана с тем, что нередко объекты должны иметь собственные свойства сразу. Пусть имеется класс Person, объекты которого обязательно должны иметь имя и фамилию. Если класс будет описан подобным образом
то создание объекта возможно без полей. Для установки имени и фамилии метод set_name() нужно вызывать отдельно:
В свою очередь, конструктор класса не позволит создать объект без обязательных полей:
Здесь при вызове класса в круглых скобках передаются значения, которые будут присвоены параметрам метода __init__(). Первый его параметр – self – ссылка на сам только что созданный объект.
Теперь, если мы попытаемся создать объект, не передав ничего в конструктор, то будет возбуждено исключение, и объект не будет создан:
Однако бывает, что надо допустить создание объекта, даже если никакие данные в конструктор не передаются. В таком случае параметрам конструктора класса задаются значения по умолчанию:
Если класс вызывается без значений в скобках, то для параметров будут использованы их значения по умолчанию. Однако поля width и height будут у всех объектов.
Кроме того, конструктору вовсе не обязательно принимать какие-либо параметры, не считая self. Значения полям могут назначаться как угодно. Также не обязательно, чтобы в конструкторе происходила установка атрибутов объекта. Там может быть, например, код, который порождает создание объектов других классов.
В других языка программирования, например в Java, классы могут содержать несколько конструкторов, которые между собой отличаются количеством параметром, а также, возможно, их типом. При создании объекта срабатывает тот конструктор, количество и типы параметров которого совпали с количеством и типами переданных в конструктор аргументов.
В Python создать несколько методов __init__() в классе можно, однако «рабочим» останется только последний. Он переопределит ранее определенные. Поэтому в Python в классах используется только один конструктор, а изменчивость количества передаваемых аргументов настраивается через назначение значений по-умолчанию.
Практическая работа. Конструктор и деструктор
Помимо конструктора объектов в языках программирования есть обратный ему метод – деструктор. Он вызывается, когда объект не создается, а уничтожается.
В языке программирования Python объект уничтожается, когда исчезают все связанные с ним переменные или им присваивается другое значение, в результате чего связь со старым объектом теряется. Удалить переменную можно с помощью команды языка del.
В классах Python функцию деструктора выполняет метод __del__().
Напишите программу по следующему описанию:
Есть класс Person, конструктор которого принимает три параметра (не учитывая self) – имя, фамилию и квалификацию специалиста. Квалификация имеет значение заданное по умолчанию, равное единице.
У класса Person есть метод, который возвращает строку, включающую в себя всю информацию о сотруднике.
Класс Person содержит деструктор, который выводит на экран фразу «До свидания, мистер …» (вместо троеточия должны выводиться имя и фамилия объекта).
В основной ветке программы создайте три объекта класса Person. Посмотрите информацию о сотрудниках и увольте самое слабое звено.
В конце программы добавьте функцию input(), чтобы скрипт не завершился сам, пока не будет нажат Enter. Иначе вы сразу увидите как удаляются все объекты при завершении работы программы.
В Python деструктор используется редко, так как интерпретатор и без него хорошо убирает «мусор».
Курс с примерами решений практических работ:
android-приложение, pdf-версия
С. Шапошникова © 2021
Объектно-ориентированное программирование на Python