سؤال

لماذا إذا فعلت:

class C(): pass
type(C())

أنا أخذت: <type 'instance'>, ، ولكن إذا فعلت:

class C(object): pass
type(c())

أنا أخذت: <class '__main__.c'> ?

الأول ليس مستخدمًا جدًا

هل كانت مفيدة؟

المحلول

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

تم تنفيذ جميع الكائنات ذات الطراز القديم مع مثيل النوع المدمج. حقيقة أنهم ما زالوا الافتراضي وأن نوعهم يبقى "مثيل" هو نتيجة لخصائص التوافق الرجعية.

يتم استخراج هذا من مستندات Python (http://docs.python.org/reference/datamodel.html)

3.3. تأتي الفصول الدراسية على الطراز الجديد والكلاسيكي في النكهات: النكهات القديمة (أو الكلاسيكية) والنمط الجديد.

حتى Python 2.1 ، كانت الفصول الدراسية القديمة هي النكهة الوحيدة المتاحة للمستخدم. مفهوم فئة (الطراز القديم) لا علاقة له بمفهوم النوع: إذا كان x مثالًا على فئة على الطراز القديم ، ثم x.صف دراسي يعين فئة x ، ولكن النوع (x) هو دائما. هذا يعكس حقيقة أن جميع الحالات ذات الطراز القديم ، بشكل مستقل عن فصلها ، يتم تنفيذها بنوع واحد مدمج ، يسمى مثيل.

تم تقديم فصول على الطراز الجديد في Python 2.2 لتوحيد الفصول والأنواع. فئة من الطراز الجديد ليست أكثر ولا أقل من نوع محدد من قبل المستخدم. إذا كان x مثيلًا لفئة جديدة على النمط الجديد ، فاحصل على (x) هو نفسه مثل x>.صف دراسي (على الرغم من أن هذا غير مضمون - يُسمح لمثيل فئة من الطراز الجديد بتجاوز القيمة التي تم إرجاعها لـ X.صف دراسي).

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

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

في حين أن هذا الدليل يهدف إلى توفير تغطية شاملة لميكانيكا فئة بيثون ، إلا أنه قد لا يزال ينقصه بعض المجالات عندما يتعلق الأمر بتغطية الطبقات على الطراز الجديد. لطفا أنظر http://www.python.org/doc/newstyle/لمصادر معلومات إضافية.

تتم إزالة الفصول الدراسية القديمة في Python 3.0 ، تاركة فقط دلالات الفصول الدراسية على الطراز الجديد. من الفصول الدراسية الجديدة.

نصائح أخرى

بصراحة ، لا أعتقد أن إجابة قصيرة هنا. أنصحك بالبدء في القراءة عن فصول التوحيد / الطراز الجديد من بيثون هنا:http://www.python.org/doc/newstyle/

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top