Een constructor is een speciaal type methode (functie) dat wordt gebruikt om de instantieleden van de klasse te initialiseren.
In C++ of Java heeft de constructor dezelfde naam als zijn klasse, maar in Python wordt de constructor anders behandeld. Het wordt gebruikt om een object te maken.
Constructors kunnen uit twee typen bestaan.
- Geparametriseerde constructor
- Niet-geparametriseerde constructor
Constructordefinitie wordt uitgevoerd wanneer we het object van deze klasse maken. Constructeurs verifiëren ook of er voldoende bronnen zijn voor het object om elke opstarttaak uit te voeren.
De constructor maken in Python
In Python is de methode the __warmte__() simuleert de constructor van de klasse. Deze methode wordt aangeroepen wanneer de klasse wordt geïnstantieerd. Het accepteert de zelf -keyword als eerste argument dat toegang geeft tot de attributen of methode van de klasse.
We kunnen een willekeurig aantal argumenten doorgeven op het moment dat het klasseobject wordt gemaakt, afhankelijk van de __warmte__() definitie. Het wordt meestal gebruikt om de klassenattributen te initialiseren. Elke klasse moet een constructor hebben, zelfs als deze eenvoudigweg afhankelijk is van de standaardconstructor.
Beschouw het volgende voorbeeld om het Medewerker klasse attributen.
Voorbeeld
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()
Uitgang:
ID: 101 Name: John ID: 102 Name: David
Het aantal objecten van een klasse tellen
De constructor wordt automatisch aangeroepen wanneer we het object van de klasse maken. Beschouw het volgende voorbeeld.
Voorbeeld
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)
Uitgang:
The number of students: 3
Niet-geparametriseerde Python-constructor
De niet-geparametriseerde constructor wordt gebruikt wanneer we de waarde of de constructor die alleen zichzelf als argument heeft, niet willen manipuleren. Beschouw het volgende voorbeeld.
Voorbeeld
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-geparametriseerde constructor
De geparametriseerde constructor heeft meerdere parameters samen met de zelf . Beschouw het volgende voorbeeld.
Voorbeeld
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()
Uitgang:
This is parametrized constructor Hello John
Python-standaardconstructor
Als we de constructor niet in de klasse opnemen of vergeten deze te declareren, wordt dat de standaardconstructor. Het voert geen enkele taak uit, maar initialiseert de objecten. Beschouw het volgende voorbeeld.
Voorbeeld
class Student: roll_num = 101 name = 'Joseph' def display(self): print(self.roll_num,self.name) st = Student() st.display()
Uitgang:
101 Joseph
Meer dan één constructeur in één klasse
Laten we eens naar een ander scenario kijken, wat er gebeurt als we twee dezelfde constructors in de klasse declareren.
Voorbeeld
class Student: def __init__(self): print('The First Constructor') def __init__(self): print('The second contructor') st = Student()
Uitgang:
The Second Constructor
In de bovenstaande code is het object st wordt de tweede constructor genoemd, terwijl beide dezelfde configuratie hebben. De eerste methode is niet toegankelijk voor de st voorwerp. Intern zal het object van de klasse altijd de laatste constructor aanroepen als de klasse meerdere constructors heeft.
Opmerking: overbelasting van de constructor is niet toegestaan in Python.
Ingebouwde klassefuncties in Python
De ingebouwde functies die in de klasse zijn gedefinieerd, worden in de volgende tabel beschreven.
SN | Functie | Beschrijving |
---|---|---|
1 | getattr(obj,naam,standaard) | Het wordt gebruikt om toegang te krijgen tot het attribuut van het object. |
2 | setattr(obj, naam,waarde) | Het wordt gebruikt om een bepaalde waarde in te stellen voor het specifieke attribuut van een object. |
3 | delattr(obj, naam) | Het wordt gebruikt om een specifiek attribuut te verwijderen. |
4 | hasattr(obj, naam) | Het retourneert waar als het object een specifiek kenmerk bevat. |
Voorbeeld
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)
Uitgang:
John 23 True AttributeError: 'Student' object has no attribute 'age'
Ingebouwde klassekenmerken
Naast de andere attributen bevat een Python-klasse ook enkele ingebouwde klasse-attributen die informatie geven over de klasse.
De ingebouwde klasse-attributen worden gegeven in de onderstaande tabel.
SN | Attribuut | Beschrijving |
---|---|---|
1 | __dict__ | Het biedt het woordenboek met informatie over de klassenaamruimte. |
2 | __doc__ | Het bevat een string met de klassedocumentatie |
3 | __naam__ | Het wordt gebruikt om toegang te krijgen tot de klassenaam. |
4 | __module__ | Het wordt gebruikt om toegang te krijgen tot de module waarin deze klasse is gedefinieerd. |
5 | __bases__ | Het bevat een tuple inclusief alle basisklassen. |
Voorbeeld
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__)
Uitgang:
None {'name': 'John', 'id': 101, 'age': 22} __main__