الدالة staticmethod()‎ في بايثون

من موسوعة حسوب

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

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

staticmethod(fun)
@staticmethod

المعاملات

fun

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

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

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

أمثلة

المثال التّالي يوضّح كيفيّة إنشاء تابع ساكن:

>>> 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)

انظر أيضًا

مصادر