بايثون3 مِن مدارس w3-25Python Classes
اقتبس من ابراهيم حمادة في 15 أبريل، 2021, 5:45 متنويه:
لِأن التاب لا تظهر على الصفحة, و هي شيء مهم جدا في الإزاحة في كود بايثون
لذلك فإننا سنستبدل التاب بالكلمة 'tab' على هذه الصفحة
و مِن الأفضل إذا شئت أن تنسخ أي كود, أن تأخذه مِن الملف النصي, أو الملفات المُرفقة.
فئات بيثون والكائنات(Python Classes and Objects)فئات / كائنات بايثون(Classes/Objects)
Python هي لغة برمجة تعتمد بشكل كبير على التعامل مع الكائنات.
كل شيء تقريبًا في Python هو كائن ، مع خصائصه و وظائفه.
الفئة(Class) هي مثل منشئ كائن ، أو "مخطط" لإنشاء الكائنات.إنشاء فئة(class)
لإنشاء فئة ، استخدم الكلمة الأساسية class:
مثال
إنشاء فئة تسمى MyClass ، مع خاصية تسمى x:
class MyClass:
tab x = 5
print(MyClass)ستكون النتيجة:
<class '__main__.MyClass'>
جربها بنفسك مِن ملف class1.pyإنشاء كائن(Object)
الآن يمكننا استخدام الفئة المسماة MyClass لإنشاء كائنات:
مثال
إنشاء كائن اسمه p1 ، وطباعة قيمة x:
class MyClass:
tab x = 5
p1 = MyClass()
print(p1.x)ستكون النتيجة:
5
جربها بنفسك مِن ملف class2.pyوظيفةْ __init __ ()
الأمثلة المذكورة أعلاه هي الفئات والكائنات في أبسط أشكالها ، وليست مفيدة حقا في تطبيقات الحياة الحقيقية.
لفهم معنى الفئات ، يجب أن نفهم وظيفة __init __ () المتضمنة.
تحتوي كافة الفئات على دالة تسمى __init__() ، والتي يتم تنفيذها دائماً عند بدء تشغيل الفئة.
استخدم الدالة __init __ () لإعطاء قيَم لخصائص الكائن ، أو إجراء عمليات أخرى ضرورية للقيام بها عند إنشاء الكائن:
مثال
قم بإنشاء فئة تسمى Person, ، و استخدم الدالة__ init _ _ () لتعيين قيَم للاسم والعمر(name and age):
class Person:
tab def __init__(self, name, age):
tab tab self.name = name
tab tab self.age = agep1 = Person("John", 36)
print(p1.name)
print(p1.age)ستكون النتيجة:
John
36
جربها بنفسك مِن ملف class3.py
ملاحظة: يتم استدعاء الدالة__ init _ _ () تلقائيا في كل مرة يتم فيها استخدام الفئة لإنشاء كائن جديد.وظائف الكائن(Object Methods)
يمكن أن تحتوي الكائنات أيضًا على وظائف. الوظائف في الكائنات هي دوال تنتمي إلى الكائن.
دعونا ننشئ وظيفة في فئةْ Person:
مثال
إدراج وظيفة لطباعة تحية ، وتنفيذها على الكائن p1:
class Person:
tab def __init__(self, name, age):
tab tab self.name = name
tab tab self.age = agetab def myfunc(self):
tab tab print("Hello my name is " + self.name)p1 = Person("John", 36)
p1.myfunc()ستكون النتيجة:
Hello my name is John
جربها بنفسك مِن ملف class4.py
ملاحظة: إنّ المعامِل self هو إشارة إلى الحالة الراهنة للفئة أو الكائن، ويستخدم للوصول إلى المتغيرات التي تنتمي إلى الفئة.المعامِل self
المعامِل self هو إشارة إلى الحالة الراهنة للفئة أو الكائن، ويستخدم للوصول إلى المتغيرات التي تنتمي إلى الفئة.
ليس من الضروري تسميتها self، يمكنك تسميتها ما تريد ، ولكن يجب أن تكون المعامِل الأول لأي دالة في الفئة:
مثال
استخدام الكلمات mysillyobject وabc بدلا من self:
class Person:
tab def __init__(mysillyobject, name, age):
tab tab mysillyobject.name = name
tab tab mysillyobject.age = agetab def myfunc(abc):
tab tab print("Hello my name is " + abc.name)p1 = Person("John", 36)
p1.myfunc()ستكون النتيجة:
Hello my name is John
جربها بنفسك مِن ملف class5.pyتعديل خصائص الكائن
يمكنك تعديل الخصائص في الكائنات مثلما يلي:
مثال
تعديل عُمْر(age) p1 إلى 40:
class Person:
tab def __init__(self, name, age):
tab tab self.name = name
tab tab self.age = agetab def myfunc(self):
tab tab print("Hello my name is " + self.name)p1 = Person("John", 36)
p1.age = 40
print(p1.age)
ستكون النتيجة:
40
جربها بنفسك مِن ملف class6.pyحذف خصائص الكائن
يمكنك حذف خصائص الكائنات باستخدام الكلمة الأساسية del:
مثال
حذف خاصية العمر(age) من الكائن p1:
class Person:
tab def __init__(self, name, age):
tab tab self.name = name
tab tab self.age = agetab def myfunc(self):
tab tab print("Hello my name is " + self.name)p1 = Person("John", 36)
del p1.age
print(p1.age)
ستكون النتيجة:
Traceback (most recent call last):
File "class7.py", line 13, in <module>
print(p1.age)
AttributeError: 'Person' object has no attribute 'age'
جربها بنفسك مِن ملف class7.pyحذف الكائنات(objects)
يمكنك حذف الكائنات باستخدام الكلمة الأساسية del:
مثال
حذف الكائن p1:
class Person:
tab def __init__(self, name, age):
tab tab self.name = name
tab tab self.age = agetab def myfunc(self):
tab tab print("Hello my name is " + self.name)p1 = Person("John", 36)
del p1
print(p1)
ستكون النتيجة:
Traceback (most recent call last):
File "class8.py", line 13, in <module>
print(p1)
NameError: 'p1' is not defined
جربها بنفسك مِن ملف class8.pyعبارةْ التمرير(pass Statement)
لا يمكن أن تكون تعريفات class فارغة، ولكن إذا كان لديك class مع عدم وجود محتوى لسبب ما، ضع فيه عبارة pass لتجنب الحصول على خطأ.
مثال
class Person:
tab passستكون النتيجة:
جربها بنفسك مِن ملف class_pass.py
اختبر نفسك مع التمارين
التمرين:
قم بإنشاء فئة باسم MyClass:
... MyClass:
tab x = 5الإجابة :
class MyClass:
tab x = 5الدرس مع الملفات المُرفقة:
https://www.dropbox.com/s/9i1ezegih41ixvr/25Python%20Classes.zip?dl=1
تنويه:
لِأن التاب لا تظهر على الصفحة, و هي شيء مهم جدا في الإزاحة في كود بايثون
لذلك فإننا سنستبدل التاب بالكلمة 'tab' على هذه الصفحة
و مِن الأفضل إذا شئت أن تنسخ أي كود, أن تأخذه مِن الملف النصي, أو الملفات المُرفقة.
فئات بيثون والكائنات(Python Classes and Objects)
فئات / كائنات بايثون(Classes/Objects)
Python هي لغة برمجة تعتمد بشكل كبير على التعامل مع الكائنات.
كل شيء تقريبًا في Python هو كائن ، مع خصائصه و وظائفه.
الفئة(Class) هي مثل منشئ كائن ، أو "مخطط" لإنشاء الكائنات.
إنشاء فئة(class)
لإنشاء فئة ، استخدم الكلمة الأساسية class:
مثال
إنشاء فئة تسمى MyClass ، مع خاصية تسمى x:
class MyClass:
tab x = 5
print(MyClass)
ستكون النتيجة:
<class '__main__.MyClass'>
جربها بنفسك مِن ملف class1.py
إنشاء كائن(Object)
الآن يمكننا استخدام الفئة المسماة MyClass لإنشاء كائنات:
مثال
إنشاء كائن اسمه p1 ، وطباعة قيمة x:
class MyClass:
tab x = 5
p1 = MyClass()
print(p1.x)
ستكون النتيجة:
5
جربها بنفسك مِن ملف class2.py
وظيفةْ __init __ ()
الأمثلة المذكورة أعلاه هي الفئات والكائنات في أبسط أشكالها ، وليست مفيدة حقا في تطبيقات الحياة الحقيقية.
لفهم معنى الفئات ، يجب أن نفهم وظيفة __init __ () المتضمنة.
تحتوي كافة الفئات على دالة تسمى __init__() ، والتي يتم تنفيذها دائماً عند بدء تشغيل الفئة.
استخدم الدالة __init __ () لإعطاء قيَم لخصائص الكائن ، أو إجراء عمليات أخرى ضرورية للقيام بها عند إنشاء الكائن:
مثال
قم بإنشاء فئة تسمى Person, ، و استخدم الدالة__ init _ _ () لتعيين قيَم للاسم والعمر(name and age):
class Person:
tab def __init__(self, name, age):
tab tab self.name = name
tab tab self.age = age
p1 = Person("John", 36)
print(p1.name)
print(p1.age)
ستكون النتيجة:
John
36
جربها بنفسك مِن ملف class3.py
ملاحظة: يتم استدعاء الدالة__ init _ _ () تلقائيا في كل مرة يتم فيها استخدام الفئة لإنشاء كائن جديد.
وظائف الكائن(Object Methods)
يمكن أن تحتوي الكائنات أيضًا على وظائف. الوظائف في الكائنات هي دوال تنتمي إلى الكائن.
دعونا ننشئ وظيفة في فئةْ Person:
مثال
إدراج وظيفة لطباعة تحية ، وتنفيذها على الكائن p1:
class Person:
tab def __init__(self, name, age):
tab tab self.name = name
tab tab self.age = age
tab def myfunc(self):
tab tab print("Hello my name is " + self.name)
p1 = Person("John", 36)
p1.myfunc()
ستكون النتيجة:
Hello my name is John
جربها بنفسك مِن ملف class4.py
ملاحظة: إنّ المعامِل self هو إشارة إلى الحالة الراهنة للفئة أو الكائن، ويستخدم للوصول إلى المتغيرات التي تنتمي إلى الفئة.
المعامِل self
المعامِل self هو إشارة إلى الحالة الراهنة للفئة أو الكائن، ويستخدم للوصول إلى المتغيرات التي تنتمي إلى الفئة.
ليس من الضروري تسميتها self، يمكنك تسميتها ما تريد ، ولكن يجب أن تكون المعامِل الأول لأي دالة في الفئة:
مثال
استخدام الكلمات mysillyobject وabc بدلا من self:
class Person:
tab def __init__(mysillyobject, name, age):
tab tab mysillyobject.name = name
tab tab mysillyobject.age = age
tab def myfunc(abc):
tab tab print("Hello my name is " + abc.name)
p1 = Person("John", 36)
p1.myfunc()
ستكون النتيجة:
Hello my name is John
جربها بنفسك مِن ملف class5.py
تعديل خصائص الكائن
يمكنك تعديل الخصائص في الكائنات مثلما يلي:
مثال
تعديل عُمْر(age) p1 إلى 40:
class Person:
tab def __init__(self, name, age):
tab tab self.name = name
tab tab self.age = age
tab def myfunc(self):
tab tab print("Hello my name is " + self.name)
p1 = Person("John", 36)
p1.age = 40
print(p1.age)
ستكون النتيجة:
40
جربها بنفسك مِن ملف class6.py
حذف خصائص الكائن
يمكنك حذف خصائص الكائنات باستخدام الكلمة الأساسية del:
مثال
حذف خاصية العمر(age) من الكائن p1:
class Person:
tab def __init__(self, name, age):
tab tab self.name = name
tab tab self.age = age
tab def myfunc(self):
tab tab print("Hello my name is " + self.name)
p1 = Person("John", 36)
del p1.age
print(p1.age)
ستكون النتيجة:
Traceback (most recent call last):
File "class7.py", line 13, in <module>
print(p1.age)
AttributeError: 'Person' object has no attribute 'age'
جربها بنفسك مِن ملف class7.py
حذف الكائنات(objects)
يمكنك حذف الكائنات باستخدام الكلمة الأساسية del:
مثال
حذف الكائن p1:
class Person:
tab def __init__(self, name, age):
tab tab self.name = name
tab tab self.age = age
tab def myfunc(self):
tab tab print("Hello my name is " + self.name)
p1 = Person("John", 36)
del p1
print(p1)
ستكون النتيجة:
Traceback (most recent call last):
File "class8.py", line 13, in <module>
print(p1)
NameError: 'p1' is not defined
جربها بنفسك مِن ملف class8.py
عبارةْ التمرير(pass Statement)
لا يمكن أن تكون تعريفات class فارغة، ولكن إذا كان لديك class مع عدم وجود محتوى لسبب ما، ضع فيه عبارة pass لتجنب الحصول على خطأ.
مثال
class Person:
tab pass
ستكون النتيجة:
جربها بنفسك مِن ملف class_pass.py
اختبر نفسك مع التمارين
التمرين:
قم بإنشاء فئة باسم MyClass:
... MyClass:
tab x = 5
الإجابة :
class MyClass:
tab x = 5
الدرس مع الملفات المُرفقة:
https://www.dropbox.com/s/9i1ezegih41ixvr/25Python%20Classes.zip?dl=1