logo

Python Constructor

בנאי הוא סוג מיוחד של מתודה (פונקציה) המשמשת לאתחול חברי המופע של המחלקה.

ב-C++ או ב-Java, לבנאי יש אותו שם כמו המחלקה שלו, אבל הוא מתייחס לבנאי בצורה שונה ב-Python. הוא משמש ליצירת אובייקט.

הבנאים יכולים להיות משני סוגים.

  1. קונסטרוקטור בעל פרמטרים
  2. קונסטרוקטור ללא פרמטרים

הגדרת הבנאי מבוצעת כאשר אנו יוצרים את האובייקט של מחלקה זו. הבנאים גם מוודאים שיש מספיק משאבים כדי שהאובייקט יבצע כל משימת הפעלה.

יצירת הבנאי ב-python

ב-Python, השיטה ה- __חוֹם__() מדמה את הבנאי של המחלקה. שיטה זו נקראת כאשר המחלקה מופעלת. זה מקבל את עצמי -מילת מפתח כארגומנט ראשון המאפשר גישה לתכונות או השיטה של ​​המחלקה.

אנו יכולים להעביר כל מספר של ארגומנטים בזמן יצירת אובייקט המחלקה, בהתאם ל- __חוֹם__() הַגדָרָה. הוא משמש בעיקר לאתחול תכונות המחלקה. לכל מחלקה חייב להיות בנאי, גם אם הוא פשוט מסתמך על בנאי ברירת המחדל.

שקול את הדוגמה הבאה כדי לאתחל את עוֹבֵד תכונות הכיתה.

דוגמא

 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 

פייתון בנאי ללא פרמטרים

הבנאי ללא פרמטרים משתמש כאשר איננו רוצים לתמרן את הערך או הבנאי שיש לו רק עצמי כארגומנט. שקול את הדוגמה הבאה.

דוגמא

 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,name,default) הוא משמש כדי לגשת לתכונה של האובייקט.
2 setattr(obj, name,value) הוא משמש כדי להגדיר ערך מסוים לתכונה הספציפית של אובייקט.
3 delattr(obj, name) הוא משמש למחיקת תכונה ספציפית.
4 hasattr(obj, name) זה מחזיר 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__