"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف تختلف الوظائف والأساليب غير المرتبطة والأساليب المرتبطة في نظام حل الأساليب في بايثون؟

كيف تختلف الوظائف والأساليب غير المرتبطة والأساليب المرتبطة في نظام حل الأساليب في بايثون؟

تم النشر بتاريخ 2024-11-10
تصفح:651

How do Functions, Unbound Methods, and Bound Methods Differ in Python\'s Method Resolution System?

الكشف عن طبيعة الوظائف والأساليب غير المقيدة والأساليب المقيدة

يعد مفهوم الفئات والأساليب أمرًا أساسيًا لنماذج البرمجة الموجهة للكائنات . يعد فهم الفروق الدقيقة والعلاقات بين الوظائف والأساليب غير المرتبطة والأساليب المرتبطة أمرًا بالغ الأهمية لإتقان تعقيدات نظام تحليل طرق بايثون.

تعريف الكيانات

  • الوظائف: تم إنشاؤها باستخدام عبارة def، الوظائف هي وحدات مستقلة من التعليمات البرمجية دون ارتباط مباشر بأي فئة.
  • طرق غير منضمة: عندما تصبح الوظيفة جزءًا من فئة التعريف، فإنه يتحول إلى طريقة غير منضم. يحدث هذا الانتقال تلقائيًا في Python 2 ولكنه عفا عليه الزمن في Python 3.
  • الطرق المقيدة: تم إنشاؤها عن طريق الوصول إلى طريقة في مثيل فئة، تتلقى الطرق المرتبطة ضمنيًا المثيل كمعلمة أولى ( self).

التحويلات وإمكانية الوصول

الوظيفة إلى الطريقة غير المقيدة:
    استخدام الأنواع. نوع الطريقة أو الوصول إلى وظيفة داخل يقوم نص الفصل بتحويله بشكل فعال إلى أسلوب غير منضم.
  • أسلوب غير منضم إلى أسلوب منضم:
  • يؤدي الوصول إلى أسلوب غير منضم في مثيل فئة إلى إنشاء أسلوب منضم.
  • الدالة إلى طريقة الربط:
  • مشابه للخطوة السابقة، يؤدي الوصول إلى وظيفة على مثيل فئة مباشرة إلى إنشاء طريقة مرتبطة.
  • الاختلافات الرئيسية

الوعي بالفئة:
    تحمل الطريقة غير المقيدة المعرفة بالفئة التي تنتمي إليها، بينما تفتقر الوظائف والأساليب المقيدة إلى هذا الوعي.
  • الوصول الفوري:
  • على عكس الطرق غير المرتبطة، التي تتطلب مثيلًا للتنفيذ، يمكن استدعاء الوظائف والأساليب المرتبطة مباشرةً.
  • التكافؤ والاستخدام

في كل من بايثون 2 وPython 3، التعبيرات التالية متكافئة وظيفيًا:

f1(C()) C.f1(C()) C().f1()

f1(C())
C.f1(C())
C().f1()

lambda *args, **kwargs: f1(C(), *args, **kwargs) functools.partial(f1, C())

lambda *args, **kwargs: f1(C(), *args, **kwargs)
functools.partial(f1, C())

لا يحتوي مثيل Python 2 للفئة على سمة مباشرة تتوافق مع الأساليب غير المرتبطة، والتي هي بدلا من ذلك يمكن استرجاعها من خلال السمة __dict__ للفئة نفسها. ومع ذلك، فإن الوصول إلى طريقة غير منضمة على مثيل يؤدي إلى تحويلها تلقائيًا إلى طريقة منضمة.

الاستنتاج

فهم الفروق بين الوظائف، والأساليب غير المرتبطة، والأساليب المرتبطة يمكّنك من الاستفادة بشكل فعال من آلية حل طريقة Python. إن فهم آليات الربط والتحويل يمكّنك من التنقل بين تعقيدات البرمجة الشيئية بسهولة.

أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3