Professional Documents
Culture Documents
ملحق oop
ملحق oop
class My_class:
'my_variable = 'This is my variable
للوصول إلى ال ُمتغيّر ننشئ أوال كائنا من ال classوبعدها نكتب اسم الكائن ث ّم نقطة ث ّم اسم
ال ُمتغيّر:
)(my_object = My_class
print my_object.my_variable
ال ُمخرج:
This is my variable
يُمكن كذلك الحصول على النّتيجة ذاتها في سطر واحد:
print My_class().my_variable
1
إنشاء التوابع
صة بال ،classويُمكننا إنشاء التابع بنفس ّ
الطريقة التي نُنشئ بها الدالة، التوابع هي دوال خا ّ
عرف مع ُمعامل باسم selfوذلك لإلشارة إلى ّ
أن أن جميع التوابع يجب أن ت ُ ّ
اإلختالف هنا هو ّ
الدالة/التابع تابع لل ،classلننشئ تابعا داخل classاآلن.
class My_class:
'my_variable = 'This is my variable
def my_method(self):
)”print (“This is my method
اآلن إذا أنشأنا كائنا فإنّنا سنتم ّكن من الوصول إلى التابع ،وتذ ّكر ّ
بأن التابع تلحقه األقواس:
)(my_object = My_class
)(my_object.my_method
ال ُمخرج:
This is my method
يُمكن كذلك الحصول على النّتيجة ذاتها في سطر واحد:
2
My_class().my_method()
ويُمكننا كذلك أن نجعلmy_method كما تُالحظ فقد نُفّذت الشيفرة الموجودة داخل التّابع
. ك ُمتغيّر أولself لكن تذ ّكر الحفاظ على الكلمة،التّابع يقبل ال ُمعامالت
class My_class:
my_variable = 'This is my variable'
def my_method(self, my_parameter):
print ('This is my method ; {} is my
parameter'.format(my_parameter))
:يُمكنك استدعاء التّابع كالتّالي
my_object = My_class()
my_object.my_method('Parameter1')
my_object.my_method('Parameter2')
:ال ُمخرج
3
سابق ،أنشأنا أوال classا باسم My_classوقُمنا بتعريف ُمتغيّر ،ث ّم بتعريففي البرنامج ال ّ
تابع باسم my_methodيقبل ُمعاملين selfو ، my_parameterبالنّسبة الستدعاء التّابع،
فنحتاج فقط إلى تمرير ال ُمعامالت الموجودة بعد ال ُمعامل selfوال نحتاج إلى تعيين قيمة لهذا
ال ُمعامل.
class My_class:
def my_method(this, my_parameter):
)print '{} is my parameter'.format(my_parameter
ولكن رغم ذلك فال ُمتعارف عليه بين ُمبرمجي لغة بايثون هو استعمال ، selfوفي كثير من
اللغات األخرى تُستعمل thisعوضا عن ، selfأما في ِ
برامجك فمن ال ُمفضّل اإلبقاء على هذه
التّسميّة ال ُمتعارف عنها ،وذلك لتكون شيفراته سهلة القراءة.
class Person:
'lastname = 'Dyouri
'job = 'Writer, Developer
def say_hello(self):
'name = 'Abdelhadi
))print ('Hello, My name is {}'.format(name
4
نعرف classباسم Personوبعدها نقوم بتعيين قيمتين
البرنامج أعاله بسيط جدا ،أوال ّ
عرفنا تابعا باسم say_helloيطبع جملة Hello,
لل ُمتغيّرين nameو ، lastnameوبعدها ّ
My name is Abdelhadi.
ك ّل شيء جيد ،لكن ماذا لو أردنا أن نصل إلى ال ُمتغيّرات األخرى الموجودة خارج التّابع ،فال
يُمكننا مثال أن نقوم باألمر كالتّالي:
class Person:
'lastname = 'Dyouri
'job = 'Writer, Developer
def say_hello(self):
'name = 'Abdelhadi
)print 'Hello, My name is {}'.format(name
print lastname
print job
ستحصل على الخطأ التّالي:
class Person:
'lastname = 'Dyouri
5
job = 'Writer, Developer'
def say_hello(self):
name = 'Abdelhadi'
print 'Hello, My name is {}'.format(name)
print 'My Last name is {} '.format(self.lastname)
print 'I am a {}'.format(self.job)
:استدعاء التّابع
me = Person()
me.say_hello()
:ال ُمخرج
6
: مثال،class فقط تخيّل بأنّها تحمل نفس اسم الself لتفهم أكثر كيفيّة عمل الكلمة
class Person:
lastname = 'Dyouri'
job = 'Writer, Developer'
def say_hello(self):
name = 'Abdelhadi'
print 'Hello, My name is {}'.format(name)
print 'My Last name is {} '.format(Abd.lastname)
print 'I am a {}'.format(Abd.job)
.واستمر عمل البرنامج دون مشاكل
ّ class إلى اسم الself الحظ بأنّنا غيّرنا كلمة
ّ وبنفس ال
class:طريقة يُمكنك أن تستدعي تابعا داخل تابع آخر في نفس ال
class Person:
def say_name(self):
7
'print 'Abdelhadi
def say_hello(self):
'print 'Hello My name is:
)(self.say_name
ال ُمخرج:
إذا نشرت برنامجك مع صديقك وأراد أن يعمل على الجزء الثاني إلضافة وظيفة تُمكن
ال ُمستخدم من طباعة ال ُمستند فال يُعقل أن يضطر للمرور على كل ما يتعلّق بجلب البيانات فقط
ألنّه يريد أن يضيف خاصيّة ال عالقة لها بجلب البيانات .استعمال البرمجة الكائنيّة في هذا
8
المشروع سيسمح لك بالتّركيز على الجزء األول ،وسيسمح لصديقك بالتّركيز على تطوير
الجزء الثاني.
خالصة األمر هي أنّك لست مضطرا الستعمال البرمجة الكائنيّة إال إذا كان برنامجك طويال
يحتوي على وظائف تتعلّق ببعضها البعض (وظائف من نفس ال ،)classونسبة استخدام
اآلخرين لشيفرتك عالية.
تمارين
التمرين 1
أنشئ classا باسمك ،وقم بتعريف ُمتغيّرين lastnameاالسم العائلي و ageالعمر ،ثم أنشئ
كائنا باسم meوقم بطباعة اسمك العائلي وعمرك.
التمرين 2
سيارة ،مثال brandالسم
أنشئ classا باسم Carسيارة وقم بتعريف ُمتغيّرات لصفات ال ّ
سيارة.
شركةrelease_date ،لتاريخ اإلعالن عن ال ّ ال ّ
التمرين 3
أضف توابع إلى ال class Carالتي أنشأتها في التّمرين الثّاني ،يُمكن أن تكون التوابع عبارة
سيارة مثال moveللحركةstop ،للتوقّفslow_down ،لتخفيض عن عمليّات تقوم بها ال ّ
سرعة ،وقم بطباعة جمل تفيد بأ ّن العمليّة قد نجحت .المفروض أن يتم ّكن اآلخرون من إنشاء ال ّ
صة بهم بحيث تُستخدم بهذه ّ
الطريقة: كائنات خا ّ
)(bmw = Car
)(bmw.move
)(bmw.slow_down
)(bmw.stop
9