Adam Ebrahim نشر 27 مايو 2021 أرسل تقرير نشر 27 مايو 2021 لدي مشكلة في صنف Class في بايثون، الصنف بسيط للغاية، وهو كالتالي: class MyClass: lst = [] student = MyClass() teacher = MyClass() student.lst.append(1) student.lst.append(2) teacher.lst.append(3) teacher.lst.append(4) print(student.lst) # Output: [1, 2, 3, 4] print(teacher.lst) # Output: [1, 2, 3, 4] لماذا يتم طباعة نفس النتيجة؟ أو بالأحرى لماذا يحتوي المتغير lst على جميع القيم [1, 2, 3, 4]؟ أليس من المفترض أن يحتوي على رقمين فقط [1, 2] في الكائن student و [3, 4] في الكائن teacher؟ 1 اقتباس
4 Ali Haidar Ahmad نشر 27 مايو 2021 أرسل تقرير نشر 27 مايو 2021 class MyClass: def __init__(self): self.lst = [] بايثون تقدم نوعين لل attributes هما : class attributes and instance attributes. ال class attributes تشبه كثيراً ال static attributes في جافا و c++ فهي تتشارك نفس القيمة مع كل ال object التي تؤخذ من هذا الصف، ويتم تعريف ال class attributes في بايثون تماماً كما قمت أنت بتعريف المتغير الذي سميته lst لذا فكانت القيم هي نفسها. أما ال instance attributes فهي متغير ينتمي إلى object واحد فقط أي أن كل متغير تعرفه ك instance attributes سوف تكون قيمه منفصلة في كل object تأخذه من هذا الصف ، ويتم تعريف ال instance attributes تماماً كما عرفتها لك أنا أي ضمن التابع init 4 اقتباس
1 Wael Aljamal نشر 27 مايو 2021 أرسل تقرير نشر 27 مايو 2021 إن تعريف المتغيرات/الخواص في الصنف مباشرة يجعل هذه الخاصية مشاركة بين جميع الأغراض من هذا الصنف أي shared لتجنب المشاكل، نقوم بإسناد الخواص من خلال دالة البناءـ حيث يتم إسنادها عن طريف الكلمة المفتاحية self التي ترتبط بالغرض الفريد المنشأ من الصنف و ليس بالصنف نفسه: class MyClass: def __init__(self): self.list = [] ليصبح المثال: class MyClass: def __init__(self): self.lst = [] student = MyClass() teacher = MyClass() student.lst.append(1) student.lst.append(2) teacher.lst.append(3) teacher.lst.append(4) print(student.lst) # Output: [1, 2] print(teacher.lst) # Output: [3, 4] 1 اقتباس
السؤال
Adam Ebrahim
لدي مشكلة في صنف Class في بايثون، الصنف بسيط للغاية، وهو كالتالي:
لماذا يتم طباعة نفس النتيجة؟ أو بالأحرى لماذا يحتوي المتغير lst على جميع القيم [1, 2, 3, 4]؟ أليس من المفترض أن يحتوي على رقمين فقط [1, 2] في الكائن student و [3, 4] في الكائن teacher؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.