Download as pdf or txt
Download as pdf or txt
You are on page 1of 9

‫معهد دمشق المتوسط ‪DTC/AI‬‬

‫ملحق المحاضرة الثانية غرضية‬


‫تعريف المتغيرات داخل ‪class‬‬
‫عرف ُمتغيّرات في ال‪ class‬تماما كما نُ ّ‬
‫عرف ال ُمتغيّرات بشكل عادي‪.‬‬ ‫يُمكننا أن نُ ّ‬

‫‪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')
:‫ال ُمخرج‬

This is my method ; Parameter1 is my parameter

This is my method ; Parameter2 is my parameter

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‬داخل التوابع‬


‫تأ ّمل ال‪ class‬التّالي‪:‬‬

‫‪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‬‬
‫ستحصل على الخطأ التّالي‪:‬‬

‫‪global name 'lastname' is not defined‬‬


‫لتفادي هذا الخطأ سنستعمل كلمة ‪ self‬قبل ال ُمتغيّر‪.‬‬

‫‪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()
:‫ال ُمخرج‬

Hello, My name is Abdelhadi


My Last name is Dyouri
I am a Writer, Developer
self.lastname ‫ عن طريق استدعائه بـ‬lastname ‫الحظ بأنّنا قُمنا بالوصول إلى ُمتغيّر‬
ّ ‫ الفرق هنا‬global ‫الطريقة ُمشابهة الستخدام كلمة‬
‫أن هذه‬ ّ ‫ وهذه‬، job‫وكذا الحال مع ال ُمتغيّر‬
‫ فتُشير إلى ال ُمتغيّر‬self ‫ أ ّما كلمة‬،‫األخيرة تُمكن من الوصول إلى ال ُمتغيّر في كامل البرنامج‬
.‫ الحاليّة فقط‬class‫عرف في ال‬
ّ ‫ال ُم‬

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‬‬

‫ال ُمخرج‪:‬‬

‫‪Hello My name is:‬‬


‫‪Abdelhadi‬‬
‫أن التّابع ‪ say_hello‬قام بطباعة جملة ‪ :Hello My name is‬ث ّم قام باستدعاء‬
‫ما حدث هو ّ‬
‫التّابع ‪ say_name‬الذي قام بدوره بطباعة االسم‪Abdelhadi.‬‬

‫لماذا تستعمل البرمجة الكائنية‪ ،‬ومتى يجب علي استخدامها‬


‫قد تُالحظ ّ‬
‫بأن ما يُمكنك فعله بالبرمجة الكائنيّة يُمكن القيام به بالدوال وال ُمتغيّرات فقط‪ .‬هذا‬
‫صحيح‪ ،‬وهو أمر واضح‪ ،‬البرمجة الكائنيّة تُستعمل أساسا إذا كان البرنامج الذي تبنيه ُمعقّدا‬
‫طور برنامجا‬‫مع العديد من الوظائف ال ُمتعلّقة ببعضها (كمكتبة برمجيّة)‪ ،‬مثال لنقل بأنّك ت ُ ّ‬
‫مسؤوال عن جلب بيانات من موقع ُمعيّن‪ ،‬وبعدها التّعديل عليها‪ ،‬ث ّم إخراج مستند ‪ PDF‬يحتوي‬
‫على هذه البيانات بشكل يُس ّهل قراءتها‪ ،‬هنا ستحتاج إلى ‪ class‬لجلب البيانات والتّعديل عليها‪،‬‬
‫ملف ‪PDF.‬‬‫نص مقروء واضح ث ّم إلى ّ‬ ‫و‪ class‬أخرى لتحويل البيانات إلى ّ‬

‫إذا نشرت برنامجك مع صديقك وأراد أن يعمل على الجزء الثاني إلضافة وظيفة تُمكن‬
‫ال ُمستخدم من طباعة ال ُمستند فال يُعقل أن يضطر للمرور على كل ما يتعلّق بجلب البيانات فقط‬
‫ألنّه يريد أن يضيف خاصيّة ال عالقة لها بجلب البيانات‪ .‬استعمال البرمجة الكائنيّة في هذا‬
‫‪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‬‬

You might also like