الفرق بين المراجعتين لصفحة: «Python/functools/partialmethod»

من موسوعة حسوب
لا ملخص تعديل
 
سطر 13: سطر 13:
عندما يكون <code>func</code> واصفًا (مثل دالّة بايثون عاديّة، أو الدّالة <code>[[Python/classmethod|classmethod()‎]]</code>، أو الدّالة <code>[[Python/staticmethod|staticmethod()]]‎</code>، أو نسخة أخرى من <code>partialmethod</code>)، فستُفوّض استدعاءات الخاصيّة ‎<code>__get__‎</code> إلى الواصف المنشأ، وسيُعاد كائن <code>[[Python/functools/partial|partial]]</code> كنتيجة.
عندما يكون <code>func</code> واصفًا (مثل دالّة بايثون عاديّة، أو الدّالة <code>[[Python/classmethod|classmethod()‎]]</code>، أو الدّالة <code>[[Python/staticmethod|staticmethod()]]‎</code>، أو نسخة أخرى من <code>partialmethod</code>)، فستُفوّض استدعاءات الخاصيّة ‎<code>__get__‎</code> إلى الواصف المنشأ، وسيُعاد كائن <code>[[Python/functools/partial|partial]]</code> كنتيجة.


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


=== <code>args</code> ===
=== <code>args</code> ===

المراجعة الحالية بتاريخ 13:07، 23 يونيو 2018

تعيد الدّالة 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

انظر أيضًا

مصادر