الغوص في الفروق الدقيقة بين أساليب الفصل والمثيل: ما وراء الذات مقابل Cls
يقترح اقتراح تحسين بايثون (PEP) 8 الاستخدام "self" كالوسيطة الأولى في أساليب المثيل و"cls" كالوسيطة الأولى في أساليب الفصل. ينبع هذا التمييز من الأدوار المختلفة التي تلعبها هذه الأساليب في العمل مع المثيلات والفئات.
طرق المثيل: الميزة الذاتية
يتم استدعاء أساليب المثيل في مثيلات فصل. تتفاعل عادةً مع سمات وسلوكيات محددة لتلك الحالة المعينة. المعلمة الأولى لهذه الأساليب هي self، والتي تمثل المثيل الذي يتم استدعاء الطريقة عليه.
على سبيل المثال، تحدد الفئة التالية طريقة مثيل "إدخال":
class Inst:
def __init__(self, name):
self.name = name
def introduce(self):
print("Hello, I am %s, and my name is %s" % (self, self.name))
عندما نقوم بإنشاء مثيل لفئة Inst ونستدعي طريقة "introduce" الخاصة بها، فإن يتم تمرير المثيل نفسه كمعلمة ذاتية، مما يسمح لنا بالوصول إلى سماته (في هذه الحالة، سمة "الاسم").
طرق الفصل: احتضان Cls
من ناحية أخرى، تعمل أساليب الفصل على الفصل نفسه وليس على الحالات الفردية. إنها تسمح لنا بتعديل أو فحص بنية الفصل أو سلوكه. المعلمة الأولى لهذه الطرق هي cls، والتي تمثل الفئة التي يتم استدعاء الطريقة عليها.
يوضح المثال التالي طريقة فئة:
class Cls:
@classmethod
def introduce(cls):
print("Hello, I am %s!" % cls)
لا تتطلب هذه الطريقة مثيلًا لأنها لا تتفاعل مع سمات كائن محددة. بدلا من ذلك، فإنه يعمل على الفئة نفسها، وتوفير معلومات حول بنيتها.
تعتبر أساليب الفئة مفيدة بشكل خاص عند الوراثة من فئة الأصل، لأنها تسمح للفئة الفرعية بتعديل أو توسيع سلوك الفئة الأصل. على سبيل المثال، تتجاوز الفئة الفرعية التالية طريقة "إدخال" فئة Cls:
class SubCls(Cls):
pass
SubCls.introduce()
# outputs: Hello, I am
باستخدام "cls" كمعلمة أولى، يمكن استدعاء الأسلوب "introduce" مباشرةً على الفئة الفرعية، مما يسمح لها بتحديد سلوكها الخاص أثناء لا يزال الوصول إلى الخصائص الموروثة من الفئة الأصل.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3