logo

Python konstruktor

A konstruktor egy speciális metódus (függvény), amelyet az osztály példánytagjainak inicializálására használnak.

A C++ vagy Java nyelvben a konstruktor neve megegyezik az osztályával, de Pythonban másképp kezeli a konstruktort. Objektum létrehozására szolgál.

A konstruktorok kétféleek lehetnek.

  1. Paraméterezett konstruktor
  2. Nem paraméterezett konstruktor

A konstruktor definíciója akkor kerül végrehajtásra, amikor létrehozzuk ennek az osztálynak az objektumát. A konstruktőrök azt is ellenőrzik, hogy elegendő erőforrás áll-e rendelkezésre az objektum számára bármely indítási feladat elvégzéséhez.

A konstruktor létrehozása pythonban

Pythonban a módszer a __hő__() szimulálja az osztály konstruktorát. Ezt a metódust akkor hívják meg, amikor az osztály példányosodik. Elfogadja a maga -keyword mint első argumentum, amely lehetővé teszi az osztály attribútumainak vagy metódusainak elérését.

Az osztályobjektum létrehozásakor tetszőleges számú argumentumot adhatunk át, attól függően __hő__() meghatározás. Leginkább az osztályattribútumok inicializálására szolgál. Minden osztálynak rendelkeznie kell konstruktorral, még akkor is, ha egyszerűen az alapértelmezett konstruktorra támaszkodik.

Tekintse meg a következő példát a Munkavállaló osztály attribútumai.

Példa

 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() 

Kimenet:

 ID: 101 Name: John ID: 102 Name: David 

Egy osztály objektumai számának megszámlálása

A konstruktor automatikusan meghívásra kerül, amikor létrehozzuk az osztály objektumát. Tekintsük a következő példát.

Példa

 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) 

Kimenet:

 The number of students: 3 

Python nem paraméterezett konstruktor

A nem paraméterezett konstruktor akkor használja, ha nem akarjuk manipulálni az értéket vagy azt a konstruktort, amelynek argumentumaként csak én szerepel. Tekintsük a következő példát.

Példa

 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 paraméterezett konstruktor

A paraméterezett konstruktornak több paramétere is van a maga . Tekintsük a következő példát.

Példa

 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() 

Kimenet:

 This is parametrized constructor Hello John 

Python alapértelmezett konstruktor

Ha nem vesszük fel a konstruktort az osztályba, vagy elfelejtjük deklarálni, akkor ez lesz az alapértelmezett konstruktor. Nem végez semmilyen feladatot, hanem inicializálja az objektumokat. Tekintsük a következő példát.

Példa

 class Student: roll_num = 101 name = 'Joseph' def display(self): print(self.roll_num,self.name) st = Student() st.display() 

Kimenet:

 101 Joseph 

Egynél több konstruktor egyetlen osztályban

Nézzünk meg egy másik forgatókönyvet, hogy mi történik, ha az osztályban két azonos konstruktort deklarálunk.

Példa

 class Student: def __init__(self): print('The First Constructor') def __init__(self): print('The second contructor') st = Student() 

Kimenet:

 The Second Constructor 

A fenti kódban az objektum utca második konstruktornak nevezik, míg mindkettőnek ugyanaz a konfigurációja. Az első módszer nem érhető el a utca tárgy. Belsőleg az osztály objektuma mindig az utolsó konstruktort hívja meg, ha az osztálynak több konstruktora van.

Megjegyzés: A konstruktor túlterhelése nem megengedett a Pythonban.

Python beépített osztályfüggvényei

Az osztályban definiált beépített függvényeket a következő táblázat ismerteti.

SN Funkció Leírás
1 getattr(obj,név,alapértelmezett) Az objektum attribútumának elérésére szolgál.
2 setattr(obj, név,érték) Egy objektum adott attribútuma egy adott értékének beállítására szolgál.
3 delattr(obj, név) Egy adott attribútum törlésére szolgál.
4 hasattr(obj, név) Igazat ad vissza, ha az objektum tartalmaz valamilyen meghatározott attribútumot.

Példa

 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) 

Kimenet:

 John 23 True AttributeError: 'Student' object has no attribute 'age' 

Beépített osztályattribútumok

A többi attribútum mellett a Python osztály is tartalmaz néhány beépített osztályattribútumot, amelyek információt szolgáltatnak az osztályról.

A beépített osztályattribútumokat az alábbi táblázat tartalmazza.

SN Tulajdonság Leírás
1 __dikt__ Ez biztosítja az osztály névterével kapcsolatos információkat tartalmazó szótárt.
2 __doc__ Tartalmaz egy karakterláncot, amely tartalmazza az osztály dokumentációját
3 __név__ Az osztálynév eléréséhez használható.
4 __modul__ A modul eléréséhez használható, amelyben ez az osztály definiálva van.
5 __bázisok__ Tartalmaz egy tuple-t, amely tartalmazza az összes alaposztályt.

Példa

 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__) 

Kimenet:

 None {'name': 'John', 'id': 101, 'age': 22} __main__