Un constructor és un tipus especial de mètode (funció) que s'utilitza per inicialitzar els membres d'instància de la classe.
En C++ o Java, el constructor té el mateix nom que la seva classe, però tracta el constructor de manera diferent a Python. S'utilitza per crear un objecte.
Els constructors poden ser de dos tipus.
- Constructor parametritzat
- Constructor no parametritzat
La definició del constructor s'executa quan creem l'objecte d'aquesta classe. Els constructors també verifiquen que hi ha prou recursos perquè l'objecte pugui realitzar qualsevol tasca d'inici.
Creant el constructor en python
A Python, el mètode __calor__() simula el constructor de la classe. Aquest mètode s'anomena quan s'instancia la classe. Accepta el jo mateix -paraula clau com a primer argument que permet accedir als atributs o mètode de la classe.
Podem passar qualsevol nombre d'arguments en el moment de crear l'objecte de classe, depenent del __calor__() definició. S'utilitza principalment per inicialitzar els atributs de classe. Cada classe ha de tenir un constructor, fins i tot si simplement es basa en el constructor predeterminat.
Considereu l'exemple següent per inicialitzar el fitxer Empleat atributs de classe.
Exemple
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()
Sortida:
ID: 101 Name: John ID: 102 Name: David
Comptar el nombre d'objectes d'una classe
El constructor es crida automàticament quan creem l'objecte de la classe. Considereu l'exemple següent.
Exemple
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)
Sortida:
The number of students: 3
Constructor Python no parametritzat
El constructor no parametritzat s'utilitza quan no volem manipular el valor o el constructor que només té self com a argument. Considereu l'exemple següent.
Exemple
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')
Constructor parametritzat Python
El constructor parametritzat té diversos paràmetres juntament amb el jo mateix . Considereu l'exemple següent.
Exemple
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()
Sortida:
This is parametrized constructor Hello John
Constructor per defecte de Python
Quan no incloem el constructor a la classe o ens oblidem de declarar-lo, aquest esdevé el constructor predeterminat. No realitza cap tasca sinó que inicialitza els objectes. Considereu l'exemple següent.
Exemple
class Student: roll_num = 101 name = 'Joseph' def display(self): print(self.roll_num,self.name) st = Student() st.display()
Sortida:
101 Joseph
Més d'un constructor en classe única
Fem una ullada a un altre escenari, què passa si declarem els dos mateixos constructors a la classe.
Exemple
class Student: def __init__(self): print('The First Constructor') def __init__(self): print('The second contructor') st = Student()
Sortida:
The Second Constructor
Al codi anterior, l'objecte st anomenat segon constructor mentre que tots dos tenen la mateixa configuració. El primer mètode no és accessible pel st objecte. Internament, l'objecte de la classe sempre cridarà a l'últim constructor si la classe té diversos constructors.
Nota: la sobrecàrrega del constructor no està permesa a Python.
Funcions de classe integrades en Python
Les funcions integrades definides a la classe es descriuen a la taula següent.
SN | Funció | Descripció |
---|---|---|
1 | getattr (obj, nom, predeterminat) | S'utilitza per accedir a l'atribut de l'objecte. |
2 | setattr (obj, nom, valor) | S'utilitza per establir un valor particular a l'atribut específic d'un objecte. |
3 | delattr (obj, nom) | S'utilitza per eliminar un atribut específic. |
4 | hasattr (obj, nom) | Retorna true si l'objecte conté algun atribut específic. |
Exemple
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)
Sortida:
John 23 True AttributeError: 'Student' object has no attribute 'age'
Atributs de classe integrats
Juntament amb els altres atributs, una classe Python també conté alguns atributs de classe integrats que proporcionen informació sobre la classe.
Els atributs de classe integrats es donen a la taula següent.
SN | Atribut | Descripció |
---|---|---|
1 | __dicte__ | Proporciona el diccionari que conté la informació sobre l'espai de noms de classe. |
2 | __doc__ | Conté una cadena que conté la documentació de la classe |
3 | __nom__ | S'utilitza per accedir al nom de la classe. |
4 | __mòdul__ | S'utilitza per accedir al mòdul en el qual es defineix aquesta classe. |
5 | __bases__ | Conté una tupla que inclou totes les classes base. |
Exemple
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__)
Sortida:
None {'name': 'John', 'id': 101, 'age': 22} __main__