الفرق بين المراجعتين لصفحة: «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> كائنًا قابلا للاستدعاء غيرَ واصف، فسيُنشأ | عندما يكون <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
انظر أيضًا
functools.partial
: إنشاء دوال جزئيّة.classmethod()
: إنشاء تابع صنف.staticmethod()
: إنشاء تابع ساكن.- الدالة
property
: تحويل تابع إلى خاصيّة.