الدالة functools.partialmethod()‎ في بايثون

من موسوعة حسوب
مراجعة 13:07، 23 يونيو 2018 بواسطة عبد-الهادي-الديوري (نقاش | مساهمات) (←‏func)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

تعيد الدّالة functools.partialmethod()‎ واصفًا يتصرّف مثل كائنات partial، إلّا أنّه مُصمّم ليُستخدم كتعريف تابع (method definition) عوضًا عن أن يكون قابلا للاستدعاء (callable) مُباشرة.

البنية العامة

functools.partialmethod(func, *args, **keywords)

المعاملات

func

واصفٌ أو كائن قابل للاستدعاء (تُعامل الكائنات التي تجتمع فيها الصّفتان على أنّها واصفات، مثل الدّوال).

عندما يكون func واصفًا (مثل دالّة بايثون عاديّة، أو الدّالة classmethod()‎، أو الدّالة staticmethod()، أو نسخة أخرى من partialmethod)، فستُفوّض استدعاءات الخاصيّة ‎__get__‎ إلى الواصف المنشأ، وسيُعاد كائن partial كنتيجة.

عندما يكون func كائنًا قابلا للاستدعاء غيرَ واصف، فسيُنشأ تابع مُرتبط (bound method) ديناميكيًّا؛ الذي يتصرّف مثل دالّة بايثون عاديّة عند استخدامها كتابع، سيُمرّر المُعامل self كأول مُعامل مكانيّ، وذلك حتّى قبل أن تُمرّر المُعاملات args ومُعاملات الكائنات المفتاحيّة keywords إلى partialmethod.

args

المُعاملات التي ستُمرّر.

keywords

المُعاملات المفتاحيّة التي ستُمرّر.

القيمة المعادة

واصف يُستعمل كتابع جزئيّ بمُعاملات ثابتة مُمرّرة مُسبقًا.

أمثلة

المثال التّالي يوضّح كيفيّة عمل هذه الدّالة:

>>> class Cell(object): # خليّة
...     def __init__(self):
...         self._alive = False
...     @property
...     def alive(self): # خاصيّة تُعيد ما إذا كانت الخليّة حيّة أو لا
...         return self._alive
...     def set_state(self, state): # تابع يُغيّر حالة الخليّة
...         self._alive = bool(state)
...     set_alive = partialmethod(set_state, True) # تابع جزئيّ يُرسل قيمة منطقيّة صحيحة إلى تابع تغيير الحالة
...     set_dead = partialmethod(set_state, False) # تابع جزئيّ لإماتة الخليّة
...
>>> c = Cell()
>>> c.alive
False
>>> c.set_alive()
>>> c.alive
True

انظر أيضًا

مصادر