Конструкторът е специален тип метод (функция), който се използва за инициализиране на членовете на екземпляра на класа.
В C++ или Java конструкторът има същото име като неговия клас, но третира конструктора по различен начин в Python. Използва се за създаване на обект.
Конструкторите могат да бъдат два вида.
- Параметризиран конструктор
- Непараметризиран конструктор
Дефиницията на конструктора се изпълнява, когато създаваме обекта от този клас. Конструкторите също така проверяват дали има достатъчно ресурси за обекта, за да изпълни всяка задача при стартиране.
Създаване на конструктор в python
В Python методът the __heat__() симулира конструктора на класа. Този метод се извиква, когато класът е инстанциран. То приема себе си -ключова дума като първи аргумент, който позволява достъп до атрибутите или метода на класа.
Можем да предадем произволен брой аргументи по време на създаване на обекта на класа, в зависимост от __heat__() определение. Използва се най-вече за инициализиране на атрибутите на класа. Всеки клас трябва да има конструктор, дори ако просто разчита на конструктора по подразбиране.
Разгледайте следния пример за инициализиране на Служител атрибути на класа.
Пример
class Employee: def __init__(self, name, id): self.id = id self.name = name def display(self): print('ID: %d Name: %s' % (self.id, self.name)) emp1 = Employee('John', 101) emp2 = Employee('David', 102) # accessing display() method to print employee 1 information emp1.display() # accessing display() method to print employee 2 information emp2.display()
Изход:
ID: 101 Name: John ID: 102 Name: David
Преброяване на броя на обектите на клас
Конструкторът се извиква автоматично, когато създаваме обекта на класа. Помислете за следния пример.
Пример
class Student: count = 0 def __init__(self): Student.count = Student.count + 1 s1=Student() s2=Student() s3=Student() print('The number of students:',Student.count)
Изход:
The number of students: 3
Python непараметризиран конструктор
Непараметризираният конструктор се използва, когато не искаме да манипулираме стойността или конструкторът, който има само self като аргумент. Помислете за следния пример.
Пример
class Student: # Constructor - non parameterized def __init__(self): print('This is non parametrized constructor') def show(self,name): print('Hello',name) student = Student() student.show('John')
Параметризиран конструктор на Python
Параметризираният конструктор има множество параметри заедно с себе си . Помислете за следния пример.
Пример
class Student: # Constructor - parameterized def __init__(self, name): print('This is parametrized constructor') self.name = name def show(self): print('Hello',self.name) student = Student('John') student.show()
Изход:
This is parametrized constructor Hello John
Конструктор по подразбиране на Python
Когато не включим конструктора в класа или забравим да го декларираме, тогава това става конструкторът по подразбиране. Той не изпълнява никакви задачи, но инициализира обектите. Помислете за следния пример.
Пример
class Student: roll_num = 101 name = 'Joseph' def display(self): print(self.roll_num,self.name) st = Student() st.display()
Изход:
101 Joseph
Повече от един конструктор в един клас
Нека да разгледаме друг сценарий, какво се случва, ако декларираме двата същите конструктора в класа.
Пример
class Student: def __init__(self): print('The First Constructor') def __init__(self): print('The second contructor') st = Student()
Изход:
The Second Constructor
В горния код обектът ул наречен втори конструктор, докато и двата имат една и съща конфигурация. Първият метод не е достъпен от ул обект. Вътрешно, обектът на класа винаги ще извиква последния конструктор, ако класът има множество конструктори.
Забележка: Претоварването на конструктора не е разрешено в Python.
Вградени в Python класови функции
Вградените функции, дефинирани в класа, са описани в следващата таблица.
SN | функция | Описание |
---|---|---|
1 | getattr(obj,име,по подразбиране) | Използва се за достъп до атрибута на обекта. |
2 | setattr(obj, име,стойност) | Използва се за задаване на определена стойност на конкретния атрибут на обект. |
3 | delattr(obj, име) | Използва се за изтриване на определен атрибут. |
4 | hasattr(obj, име) | Връща true, ако обектът съдържа някакъв специфичен атрибут. |
Пример
class Student: def __init__(self, name, id, age): self.name = name self.id = id self.age = age # creates the object of the class Student s = Student('John', 101, 22) # prints the attribute name of the object s print(getattr(s, 'name')) # reset the value of attribute age to 23 setattr(s, 'age', 23) # prints the modified value of age print(getattr(s, 'age')) # prints true if the student contains the attribute with name id print(hasattr(s, 'id')) # deletes the attribute age delattr(s, 'age') # this will give an error since the attribute age has been deleted print(s.age)
Изход:
John 23 True AttributeError: 'Student' object has no attribute 'age'
Вградени атрибути на класа
Заедно с другите атрибути, класът на Python също съдържа някои вградени атрибути на класа, които предоставят информация за класа.
Вградените атрибути на класа са дадени в таблицата по-долу.
SN | Атрибут | Описание |
---|---|---|
1 | __dict__ | Той предоставя речника, съдържащ информацията за пространството от имена на класа. |
2 | __doc__ | Той съдържа низ, който има документацията на класа |
3 | __име__ | Използва се за достъп до името на класа. |
4 | __модул__ | Използва се за достъп до модула, в който е дефиниран този клас. |
5 | __бази__ | Той съдържа кортеж, включващ всички базови класове. |
Пример
class Student: def __init__(self,name,id,age): self.name = name; self.id = id; self.age = age def display_details(self): print('Name:%s, ID:%d, age:%d'%(self.name,self.id)) s = Student('John',101,22) print(s.__doc__) print(s.__dict__) print(s.__module__)
Изход:
None {'name': 'John', 'id': 101, 'age': 22} __main__