الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سطر لم افهمه في OOP

بدأه Maso3 في 4 نوفمبر 2011 · 6 رد · 921 مشاهدة · في لغة Python
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

انا فاهم ال OOP لكن هناك سطر لم افهمه ولم اعرف وظيفته

هذا برنامج بسيط قمت بكتابته

class Letters():
    def __init__(self,letter1,letter2):
        self.letter1=str(letter1)
        self.letter2=str(letter2)

    def L1(self):
        self.letter1=str(raw_input('add your letters'))
        print 'your letters is :',self.letter1

    def L2(self):
        print 'big :',str.upper(self.letter1)
        print 'small :',str.lower(self.letter1)

l=Letters('letter1','letter1')
l.L1()
l.L2()

لم افهم هذا السطر

l=Letters('letter1','letter1')

حيث قمت بكاتبه وانا لم افهم ما هي وظيفته مجرد اني قلدت بعض الكتب في بناء البرامج

ولماذا اذا اصبح هكذا

l=Letters()

لا يعمل البرنامج

وشكرا جزيلاً للجميع

#2

السلام عليكم ...

الكود الأول هو تعريف للصف class .. بقي أن نعرف الــ instance أو يسمى Object (كائن) .. من الصف ... و الكائنات تتواجد فعليا في الذاكرة ... و يتم إنشاء الكائنات باستخدم اسم الصف مع تمرير البارمترات كما تم تعريفا في الباني Constructor المسمى __init__ .. و طالما لدينا ثلاث بارمترات الأول هو self للدلالة أن الــ function هي دالة ضمن الصف .. بقي بارمتران .. و هما الذين يتم تمريرهما عند بناء الكائنات ..

و لو كتبنا الكود التالي

L1=Letters('Hello', 'World')
L2=Letters('From', 'Python')

سيكون شكل الذاكرة كما في الصورة . (شكل رمزي للذاكرة لبيان كيف تعمل البرامج غرضية التوجه)

post-94677-072234500 1320412443_thumb.pn

عليك بقراءة الـ ـclasses بشكل جيد ..

http://docs.python.o...al/classes.html

المرفقات
Python_OOP.png

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 4 نوفمبر 2011 في 16:18

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#3

شكراً جزيلاً لك

في الحقيقة انا اريد ماهي وظيفة هذا السطر وماذا يفيدني في البرنامج

l=Letters('letter1','letter1')

ولماذا اذا اصبح هكذا

l=Letters()

لايعمل البرنامج!

اتمنى الإجابة على هذه الاسئلة وشكراً على جهودك

1 −1
#4

الأخ houssam11350_11350 أجاب عن سؤالك الأساسي بوضوح، أما بالنسبة لاستفسارك:

Maso3 كتب:

ولماذا اذا اصبح هكذا

l=Letters()

لايعمل البرنامج!

فالسبب أن البارامترات المحددة ليست optional ويجب أن يتم تمريرها أو تمرير قيمة افتراضية لها في حال إهمالها عند إنشاء غرض من الصف.

في حال أردتها أن تكون بالشكل الذي تريده، فيجب عليك تعديل الدالة __init__ لتلغي البارامترات فيها، وفي هذه الحالة عليك أيضاً أن تقوم بتعديل محتواها فلم يعد هناك بارامترات لاسنادها للمتغيرات letter1 و letter2.

لوضع قيم افتراضية للبارامترات، اكتبها بالشكل:

def __init__(self,letter1 = "default letter1",letter2 = "default letter2"):

للمزيد من المعلومات:

http://en.wikipedia.org/wiki/Default_argument

2

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#5

في الحقيقة لم يتضح لي السؤال الاول

−1
#6
l=Letters('letter1','letter1')

سيتم إنشاء غرض object من الصف Letters، ويسند للمتغير l

الغرض من الصف فكّر فيه على أنه نسخة من الصف في الذاكرة، يتم التعديل عليها بشكل مستقل، وبالطبع يمكنك إنشاء أي عدد ترغب به من الأغراض (نسخ عن الصف المطلوب) والتعامل مع كل منها على حدة.

عند إنشاء غرض من صف، يتم استدعاء التابع الباني Constructor، والذي هو التابع __init__ في هذه الحالة

التابع الباني يمكن أن يأخذ بارامترات وسيطة مثل letter1 و letter2 ويمكن ألا يأخذ أي بارامتر.

السطر أعلاه يستدعي التابع الباني ويمرر إليه قيمتين 'letter1' و 'letter1' واللتين يتم إسنادهما إلى المتغيرات l->L1 و l->L2 على الترتيب.

هل هذا أوضح؟

إن لم تكن الإجابة أيضاً واضحة، فعليك دراسة الصفوف من خلال الرابط الذي وضعه حسام في رده السابق.

1

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#7

اتضح لي الآن كل شيء

بارك الله فيكما اخي حسام وXacker

وجزاكما الله خيراً

شكراً لكما على التوضيح

مواضيع مشابهة