اذهب إلى المحتوى

السؤال

نشر

وجد العديد من الأكواد الفترة الماضية تستخدم OOP ولكن عند إنشاء صنف أجد أنه يتم إنشائه كالتالي:

class MyClass(object):
    pass

في الكود السابق لماذا يتم إستخدام object وهل يوجد فرق إن لم أستخدم هذا الكائن ومتى يجب أن أقوم بإستخدام نفس الطريقة السابقة؟

 

Recommended Posts

  • 1
نشر

نعم هناك فرق في استخدام الكود كما في الطريقة السابقة حيث أن 

  • ال "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
نشر (معدل)

الصف  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 وأيضاً توفيرها للذاكرة.

تم التعديل في بواسطة Ali Haidar Ahmad

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...