المُنشئ هو نوع خاص من الطريقة (الوظيفة) يُستخدم لتهيئة أعضاء المثيل للفئة.
في C++ أو Java، يكون للمنشئ نفس اسم فئته، لكنه يعامل المنشئ بشكل مختلف في 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')
بايثون منشئ المعلمات
يحتوي المنشئ ذو المعلمات على معلمات متعددة بالإضافة إلى الذات . النظر في المثال التالي.
مثال
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
بايثون المنشئ الافتراضي
عندما لا نقوم بتضمين المُنشئ في الفصل أو ننسى الإعلان عنه، يصبح المُنشئ الافتراضي. لا يؤدي أي مهمة ولكنه يقوم بتهيئة الكائنات. النظر في المثال التالي.
مثال
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.
وظائف فئة بايثون المضمنة
يتم وصف الوظائف المضمنة المحددة في الفصل في الجدول التالي.
SN | وظيفة | وصف |
---|---|---|
1 | getattr (الكائن، الاسم، الافتراضي) | يتم استخدامه للوصول إلى سمة الكائن. |
2 | setattr (الكائن، الاسم، القيمة) | يتم استخدامه لتعيين قيمة معينة للسمة المحددة للكائن. |
3 | ديلاتر (كائن، اسم) | يتم استخدامه لحذف سمة معينة. |
4 | hasattr (كائن، اسم) | يتم إرجاعه صحيحًا إذا كان الكائن يحتوي على بعض السمات المحددة. |
مثال
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 | __قاموس__ | يوفر القاموس الذي يحتوي على معلومات حول مساحة اسم الفئة. |
2 | __doc__ | أنه يحتوي على سلسلة تحتوي على وثائق الفئة |
3 | __اسم__ | يتم استخدامه للوصول إلى اسم الفئة. |
4 | __وحدة__ | يتم استخدامه للوصول إلى الوحدة التي تم تعريف هذه الفئة فيها. |
5 | __القواعد__ | أنه يحتوي على Tuple بما في ذلك جميع الفئات الأساسية. |
مثال
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__