Konstruktor je posebna vrsta metode (funkcije), ki se uporablja za inicializacijo članov instance razreda.
V C++ ali Javi ima konstruktor isto ime kot njegov razred, vendar v Pythonu konstruktor obravnava drugače. Uporablja se za ustvarjanje predmeta.
Konstruktorji so lahko dveh vrst.
- Parametriziran konstruktor
- Neparametrizirani konstruktor
Definicija konstruktorja se izvede, ko ustvarimo objekt tega razreda. Konstruktorji prav tako preverijo, ali je na voljo dovolj sredstev za izvedbo katere koli zagonske naloge.
Ustvarjanje konstruktorja v pythonu
V Pythonu je metoda the __toplota__() simulira konstruktorja razreda. Ta metoda se pokliče, ko je razred instanciran. Sprejema sebe -keyword kot prvi argument, ki omogoča dostop do atributov ali metode razreda.
V času ustvarjanja predmeta razreda lahko posredujemo poljubno število argumentov, odvisno od __toplota__() definicija. Večinoma se uporablja za inicializacijo atributov razreda. Vsak razred mora imeti konstruktor, tudi če se preprosto opira na privzeti konstruktor.
Razmislite o naslednjem primeru za inicializacijo Zaposleni atributi razreda.
Primer
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()
Izhod:
ID: 101 Name: John ID: 102 Name: David
Štetje števila objektov v razredu
Konstruktor se pokliče samodejno, ko ustvarimo objekt razreda. Razmislite o naslednjem primeru.
Primer
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)
Izhod:
The number of students: 3
Python neparametriziran konstruktor
Neparametrizirani konstruktor uporabljamo, ko ne želimo manipulirati z vrednostjo ali konstruktor, ki ima kot argument samo sebe. Razmislite o naslednjem primeru.
Primer
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 parametriran konstruktor
Parametrizirani konstruktor ima več parametrov skupaj z sebe . Razmislite o naslednjem primeru.
Primer
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()
Izhod:
This is parametrized constructor Hello John
Privzeti konstruktor Python
Ko konstruktorja ne vključimo v razred ali ga pozabimo deklarirati, potem to postane privzeti konstruktor. Ne izvaja nobene naloge, ampak inicializira objekte. Razmislite o naslednjem primeru.
Primer
class Student: roll_num = 101 name = 'Joseph' def display(self): print(self.roll_num,self.name) st = Student() st.display()
Izhod:
101 Joseph
Več kot en konstruktor v enem razredu
Oglejmo si še en scenarij, kaj se zgodi, če v razredu deklariramo dva ista konstruktorja.
Primer
class Student: def __init__(self): print('The First Constructor') def __init__(self): print('The second contructor') st = Student()
Izhod:
The Second Constructor
V zgornji kodi je predmet st imenovan drugi konstruktor, medtem ko imata oba enako konfiguracijo. Prva metoda ni dostopna z st predmet. Interno bo objekt razreda vedno poklical zadnjega konstruktorja, če ima razred več konstruktorjev.
Opomba: Preobremenitev konstruktorja v Pythonu ni dovoljena.
Funkcije razreda, vgrajene v Python
Vgrajene funkcije, definirane v razredu, so opisane v naslednji tabeli.
SN | funkcija | Opis |
---|---|---|
1 | getattr(obj,ime,privzeto) | Uporablja se za dostop do atributa predmeta. |
2 | setattr(obj, ime, vrednost) | Uporablja se za nastavitev določene vrednosti specifičnemu atributu predmeta. |
3 | delattr(obj, ime) | Uporablja se za brisanje določenega atributa. |
4 | hasattr(obj, ime) | Vrne true, če predmet vsebuje določen atribut. |
Primer
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)
Izhod:
John 23 True AttributeError: 'Student' object has no attribute 'age'
Vgrajeni atributi razreda
Skupaj z drugimi atributi vsebuje razred Python tudi nekaj vgrajenih atributov razreda, ki zagotavljajo informacije o razredu.
Vgrajeni atributi razreda so podani v spodnji tabeli.
SN | Atribut | Opis |
---|---|---|
1 | __dict__ | Zagotavlja slovar, ki vsebuje informacije o imenskem prostoru razreda. |
2 | __doc__ | Vsebuje niz, ki vsebuje dokumentacijo razreda |
3 | __ime__ | Uporablja se za dostop do imena razreda. |
4 | __modul__ | Uporablja se za dostop do modula, v katerem je definiran ta razred. |
5 | __baze__ | Vsebuje tuple, ki vključuje vse osnovne razrede. |
Primer
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__)
Izhod:
None {'name': 'John', 'id': 101, 'age': 22} __main__