الفرق بين المراجعتين ل"Python/staticmethod"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
ط (استبدال النص - 'Python/defining-functions' ب'Python/defining_functions')
 
سطر 53: سطر 53:
 
== انظر أيضًا ==
 
== انظر أيضًا ==
 
* [[Python/defining_functions|تعريف الدوال في بايثون]].
 
* [[Python/defining_functions|تعريف الدوال في بايثون]].
* [[Python/classmethod|الدالة classmethod()‎ في بايثون]]، لإنشاء تابع صنف.
+
* الدالة <code>[[Python/classmethod|classmethod()‎]]</code>: تحول تابعًا عاديًّا في صنف ما إلى تابع صنف.
  
 
== مصادر ==
 
== مصادر ==

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

تُحوّل الدّالة staticmethod()‎ تابعًا إلى تابعٍ ساكن (static method).

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

staticmethod(fun)
@staticmethod

المعاملات

fun

الدّالة أو التّابع المُراد تحويله إلى تابعٍ ساكن.

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

يُحوّل التّابع المُزخرَف إلى تابعٍ ساكن لا يستقبل مُعاملًا أولًا صريحًا (المُعامل المعروف بالاسم self في التّوابع).

أمثلة

المثال التّالي يوضّح كيفيّة إنشاء تابع ساكن باستعمال الدّالة staticmethod كمُزخرِف:

>>> class A:
...     @staticmethod
...     def hello(): # لاحظ أنّ التّابع السّاكن لا يستقبل أيّ مُعامل تلقائيّ كما في التّوابع العاديّة
...         return 'Hello'
...     
... 
>>> A.hello() # يُمكن استدعاء التّابع على الصّنف مُباشرةً
'Hello'
>>> A().hello() # ويمكن استدعاؤه على نُسخة من الصّنف كذلك
'Hello'

يُمكن للتّوابع السّاكنة أن تقبل مُعاملات كذلك كما الدّوال العاديّة:

>>> class A:
...     @staticmethod
...     def add(x, y):
...         return x+y
...     
... 
>>> A.add(5, 3)
8
>>> A().add(1, 3)
4

ملاحظات

  • التّوابع السّاكنة مُشابهة لتلك الموجودة في Java أو C‎+‎+‎.
  • كما هو الحال مع جميع المُزخرفات، يُمكن كذلك استدعاء الدّالة staticmethod()‎ كدالة عاديّة والتعامل مع نتيجة الاستدعاء. يُطلَبُ هذا أحيانًا عندما ترغب بالحصول على مرجع يُشير إلى دالّة من داخل الصّنف وتريد تفادي التحويل الآلي الذي يُحول الدّالة إلى دالّة نُسخة (instance method). استعمل ما يلي في مثل هذه الحالات:
class C:
    builtin_open = staticmethod(open)

انظر أيضًا

مصادر