What is init function in python

Конструктор класса – метод __init__

В объектно-ориентированном программировании конструктором класса называют метод, который автоматически вызывается при создании объектов. Его также можно назвать конструктором объектов класса. Имя такого метода обычно регламентируется синтаксисом конкретного языка программирования. Так в Java имя конструктора класса совпадает с именем самого класса. В Python же роль конструктора играет метод __init__ .

В Python наличие пар знаков подчеркивания спереди и сзади в имени метода говорит о том, что он принадлежит к группе методов перегрузки операторов. Если подобные методы определены в классе, то объекты могут участвовать в таких операциях как сложение, вычитание, вызываться как функции и др.

При этом методы перегрузки операторов не надо вызывать по имени. Вызовом для них является сам факт участия объекта в определенной операции. В случае конструктора класса – это операция создания объекта. Так как объект создается в момент вызова класса по имени, то в этот момент вызывается метод __init__ .

Необходимость конструкторов связана с тем, что нередко объекты должны иметь собственные свойства сразу. Пусть имеется класс Person , объекты которого обязательно должны иметь имя и фамилию. Если класс будет описан подобным образом

class Person: def set_name(self, n, s): self.name = n self.surname = s

то создание объекта возможно без полей. Для установки имени и фамилии метод set_name нужно вызывать отдельно:

>>> from test import Person >>> p1 = Person() >>> p1.set_name("Bill", "Ross") >>> p1.name, p1.surname ('Bill', 'Ross')

В свою очередь, конструктор класса не позволит создать объект без обязательных полей:

class Person: def __init__(self, n, s): self.name = n self.surname = s p1 = Person("Sam", "Baker") print(p1.name, p1.surname)

Здесь при вызове класса в круглых скобках передаются значения, которые будут присвоены параметрам метода __init__ . Первый его параметр – self – ссылка на сам только что созданный объект.

Читайте также:  Работа со строками его php

Теперь, если мы попытаемся создать объект, не передав ничего в конструктор, то будет возбуждено исключение, и объект не будет создан:

>>> p1 = Person() Traceback (most recent call last): File "", line 1, in TypeError: __init__() missing 2 required positional arguments: 'n' and 's'

Однако бывает, что надо допустить создание объекта, даже если никакие данные в конструктор не передаются. В таком случае параметрам конструктора класса задаются значения по умолчанию:

class Rectangle: def __init__(self, w=0.5, h=1): self.width = w self.height = h def square(self): return self.width * self.height rec1 = Rectangle(5, 2) rec2 = Rectangle() rec3 = Rectangle(3) rec4 = Rectangle(h=4) print(rec1.square()) print(rec2.square()) print(rec3.square()) print(rec4.square())

Если класс вызывается без значений в скобках, то для параметров будут использованы их значения по умолчанию. Однако поля width и height будут у всех объектов.

Кроме того, конструктору вовсе не обязательно принимать какие-либо параметры, не считая self .

В других языка программирования, например в Java, классы могут содержать несколько конструкторов, которые между собой отличаются количеством параметром, а также, возможно, их типом. При создании объекта срабатывает тот конструктор, количество и типы параметров которого совпали с количеством и типами переданных в конструктор аргументов.

В Python создать несколько методов __init__ в классе можно, однако «рабочим» останется только последний. Он переопределит ранее определенные. Поэтому в Python в классах используется только один конструктор, а изменчивость количества передаваемых аргументов настраивается через назначение значений по-умолчанию.

Практическая работа. Конструктор и деструктор

Помимо конструктора объектов в языках программирования есть обратный ему метод – деструктор. Он вызывается, когда объект не создается, а уничтожается.

Это не значит, что сам деструктор уничтожает объект. В теле самого метода нет никаких инструкций по удалению экземпляра. Непосредственное удаление выполняется автоматически так называемым сборщиком мусора.

Деструктор (финализатор) в коде вашего класса следует использовать, когда при удалении объекта необходимо выполнить ряд сопутствующий действий, например, отправить сообщение, закрыть файл, разорвать соединение с базой данных.

В языке программирования Python объект уничтожается, когда исчезают все связанные с ним переменные или им присваивается другое значение, в результате чего связь со старым объектом теряется. Удалить переменную можно с помощью команды языка del . Также все объекты уничтожаются, когда программа завершает свою работу.

В классах Python функцию деструктора выполняет метод __del__ .

Напишите программу по следующему описанию:

  1. Есть класс Person , конструктор которого принимает три параметра (не учитывая self ) – имя, фамилию и квалификацию специалиста. Квалификация имеет значение заданное по умолчанию, равное единице.
  2. У класса Person есть метод, который возвращает строку, включающую в себя всю информацию о сотруднике.
  3. Класс Person содержит деструктор, который выводит на экран фразу «До свидания, мистер …» (вместо троеточия должны выводиться имя и фамилия объекта).
  4. В основной ветке программы создайте три объекта класса Person . Посмотрите информацию о сотрудниках и увольте самое слабое звено.
  5. В конце программы добавьте функцию input() , чтобы скрипт не завершился сам, пока не будет нажат Enter . Иначе вы сразу увидите как удаляются все объекты при завершении работы программы.

Курс с примерами решений практических работ:
pdf-версия

Объектно-ориентированное программирование на Python

Источник

[Solved] Python InIt Function Explained With Examples

python init function

In this tutorial, we’ll learn what Python init function is and how to properly use it. We’ll go through multiple practical Python examples for better understanding.

Introduction: Python init Function

In Python class-object concept, init function is used to automatically initialize the object with some values when its created. Its used inside the class. Its automatically called when the object of that same class is created.

Let’s now practically understand how to use init function in Python class.

Syntax of init Function

def __init__(self): // body of init
  • It starts with def keyword.
  • Two underscores before and after the name.
  • Self works as an instance of object and its necessary. Or else, exception will raised while creating object of this class. Name can be self, a, b etc.
  • We can also specify other parameters to accept some values when the object is created.
  • Colon(:) is necessary after the ending parenthesis.
  • In the next line, we can specify body of this init method. Indentation is required.

Implementing Python init Function (Multiple Examples)

Below examples will explain the implementation and usage of Python init function.

Example 1: Simple Python init Function

class Fun: def __init__(self): print('Init runs automatically') obj=Fun()

Output

We can see that init runs automatically when the object of that specific class is created. As a result, the print function inside this init function is executed.

Example 2: Python init Function with Custom Arguments

class Fun: def __init__(self,a,b): self.name=a self.age=b obj=Fun('Zeeshan',24) print(obj.name) print(obj.age)

Output

We’ve passed two arguments to Python init function and by using self, we’ve created two attributes and assign these values to them. For demonstration, we’ve printed the values using object of that class.

We can fetch these values within the same class as well. For that, we’ve to use self(or other name specified). See below code:

class Fun: def __init__(self,a,b): self.name=a self.age=b def values(self): // can use other name as well like selfie, a,b,value etc print(self.name) // same name should be used here as well like selfie.name print(self.age) obj=Fun('Zeeshan',24) obj.values()

Output

In this case, name and age are not local variables. They actually belong to an object so we need to use self(or other name specified) for them like self.name or self.age.

Example 3: Find Greater Number

class Fun: def __init__(self,a,b,c): self.value1=a # can also use same name as well like self.a=a etc self.value2=b self.value3=c def findGreater(selfie): # can use self or selfie or some other name if(selfie.value1>selfie.value2 and selfie.value1>selfie.value3): print(selfie.value1+' is greatest') elif(selfie.value2>selfie.value1 and selfie.value2>selfie.value3): print(selfie.value2+' is greatest') elif(selfie.value3>selfie.value1 and selfie.value3>selfie.value2): print(selfie.value3+' is greatest') else: print('Try again') # takes three numbers from user val1=input('Enter first number:') val2=input('Enter second number:') val3=input('Enter third number') obj=Fun(val1,val2,val3) obj.findGreater() # calls the find greater method of Fun class

Output

Enter first number: 3 Enter second number: 5 Enter third number 2 5 is greatest
  • We’ve taken three numbers from user and passed it as an argument to Python init function.
  • After that, we’ve created a method in the same class. This method will check which one is greatest among these three numbers using Python if else conditions.
  • We’ve created an object which will initialized the object and after that, we’ve called the find greater method using this object.
  • As a result, the method shows which number is the greatest.
  • We can use the same code(if, else, print etc.) in the init function as well but to make things look professional, we’ve used another method in the same class.

So this is how we can easily use Python init function. Feel free to share if you like this article. Also, do try it with other examples as well for better understanding.

Don’t hesitate to ask if you still have any questions regarding the implementation of Python init function. We’d be very happy to answer all.

Conclusion

To conclude this article, hope you now have a detailed understanding of how Python init function works. We’ll be very glad to receive your amazing feedback on this article.

Do visit our other articles on Python programming. Thank you for reading this article.

Источник

Оцените статью