Fahmy Mostafa نشر 6 يوليو 2021 أرسل تقرير نشر 6 يوليو 2021 وجد العديد من الأكواد الفترة الماضية تستخدم OOP ولكن عند إنشاء صنف أجد أنه يتم إنشائه كالتالي: class MyClass(object): pass في الكود السابق لماذا يتم إستخدام object وهل يوجد فرق إن لم أستخدم هذا الكائن ومتى يجب أن أقوم بإستخدام نفس الطريقة السابقة؟ 1 اقتباس
1 عبدالباسط ابراهيم نشر 6 يوليو 2021 أرسل تقرير نشر 6 يوليو 2021 نعم هناك فرق في استخدام الكود كما في الطريقة السابقة حيث أن ال "classic" style classes كالتالي class ClassicSpam: pass ال "new" style classes كالتالي class MyClass(object): pass الطريقة الثانية تم إضافتها في الإصدار 2.2 وتتميز بدعمها ل يمكنك استخدام ال property لإدارة الخصائص ال slots لتحديد الخصائص المطلوبة الدالة __new__ لتحديد كيفية إنشاء الكائنات من الاصناف الدالة super() يمكنك القراءة عن هذه الإضافات بتعمق أما في الإصدار الثالث فإنه سواء استخدمت الطريقة السابقة أم لا فإنه يتم استخدام ال"new" style classes مما يعني أن الكود التالي class MyClass(object): pass مكافئ تماماً ل class MyClass(): pass 1 اقتباس
1 Ali Haidar Ahmad نشر 7 يوليو 2021 أرسل تقرير نشر 7 يوليو 2021 (معدل) الصف object هو جذر كل الصفوف في بايثون أو الأب لكل الصفوف base-class. في بايثون 3 لافرق في كتابة: class hi: pass hi.__bases__ #(<type 'object'>,) أو: class hi(object): pass hi.__bases__ # الخرج #(<type 'object'>,) فكلاهما يؤدي إلى إنشاء صف جديد مع تحديد الصف object كأب له كما تلاحظ من الخرج. أما في بايثون 2 (تحديداً من بعد 2.2) فإن تعريف الكلاس بالشكل: class hi(object): pass يؤدي إلى إنشاء صف جديد مع تحديد الصف object كأب له، ويسمى التعريف بهذا الشكل "new style class"، أي كما في بايثون 3. أما تعريفه بهذا الشكل: class hi: pass # انظر hi.__bases__ # الخرج () فهنا لايكون لدينا object كصف رئيسي. وتسمى بالطريقة الكلاسيكية."old style class". وطبعاً أنت ستهتم بالطريقة الجديدة فكلنا نتبع الطرق الأحدث. طبعاً في كل كم النمط القديم والحديث فإن ال staticmethod و classmethod تعملان بشكل طبيعي، property تعمل مع القراءة في النمط القديم لكنها تفشل مع ال intercept writes وأما __slots__ فتم تحسينها من حيث سرعة الوصول إلى ال attribute وأيضاً توفيرها للذاكرة. تم التعديل في 7 يوليو 2021 بواسطة Ali Haidar Ahmad 2 اقتباس
السؤال
Fahmy Mostafa
وجد العديد من الأكواد الفترة الماضية تستخدم OOP ولكن عند إنشاء صنف أجد أنه يتم إنشائه كالتالي:
في الكود السابق لماذا يتم إستخدام object وهل يوجد فرق إن لم أستخدم هذا الكائن ومتى يجب أن أقوم بإستخدام نفس الطريقة السابقة؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.