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

من موسوعة حسوب
إضافة الصّفحة
 
طلا ملخص تعديل
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:الدالة <code>classmethod()‎</code> في بايثون}}</noinclude>
<noinclude>{{DISPLAYTITLE:الدالة <code>classmethod()‎</code> في بايثون}}</noinclude>
تُحوّل الدّالة <code>classmethod()‎</code> المُزخرِفةُ (decorator) تابعًا عاديًّا إلى تابع صنف (class method).
تُحوّل الدّالة <code>classmethod()‎</code> المُزخرِفةُ (decorator) تابعًا عاديًّا إلى تابع صنف (class method).
يستقبل تابع الصّنفِ الصّنفَ كمُعاملٍ أول، تمامًا كما يستقبل التّابع العاديّ النّسخة (instance) كمُعامل أولٍ نُشير إليه بالاسم <code>self</code>.
يستقبل تابع الصّنفِ الصّنفَ كمُعاملٍ أول، تمامًا كما يستقبل التّابع العاديّ النّسخة (instance) كمُعامل أولٍ نُشير إليه بالاسم <code>self</code>.


سطر 33: سطر 34:
يُمكن استدعاء تابع الصّنف سواء على الصّنف مُباشرةً (مثل <code>C.f()‎</code>) أو على نسخة من الصّنف (مثل <code>‎C‎‎(‎)‎‎.‎f‎(‎)‎‎</code>). عند استدعاء التّابع على النّسخة، تُتجاهل النّسخة ويُمرَّر صنفُها إلى التّابع، إن استُدعيَ تابع صنفٍ لصنفٍ مشتقّ (derived class)، فسيُمرَّر كائن الصّنف المُشتقّ كمُعاملٍ أولٍ للتّابع.
يُمكن استدعاء تابع الصّنف سواء على الصّنف مُباشرةً (مثل <code>C.f()‎</code>) أو على نسخة من الصّنف (مثل <code>‎C‎‎(‎)‎‎.‎f‎(‎)‎‎</code>). عند استدعاء التّابع على النّسخة، تُتجاهل النّسخة ويُمرَّر صنفُها إلى التّابع، إن استُدعيَ تابع صنفٍ لصنفٍ مشتقّ (derived class)، فسيُمرَّر كائن الصّنف المُشتقّ كمُعاملٍ أولٍ للتّابع.


توابع الأصناف مُختلفة عن التوابع السّاكنة () في لغات البرمجة الأخرى مثل Java وC‎+‎+‎. إن أردت استعمال التوابع السّاكنة، فانظر صفحة الدّالة <code>staticmethod()‎</code>.
توابع الأصناف مُختلفة عن التوابع السّاكنة في لغات البرمجة الأخرى مثل Java وC‎+‎+‎. إن أردت استعمال التوابع السّاكنة، فانظر صفحة الدّالة <code>[[Python/staticmethod|staticmethod()]]‎</code>.


== انظر أيضًا ==
== انظر أيضًا ==
* [[Python/class-definition|تعريف الأصناف في بايثون]]
* [[Python/class-definition|تعريف الأصناف في بايثون]].
* [[Python/defining-functions|تعريف الدوال في بايثون]].
* [[Python/defining-functions|تعريف الدوال في بايثون]].



مراجعة 16:19، 22 أبريل 2018

تُحوّل الدّالة classmethod()‎ المُزخرِفةُ (decorator) تابعًا عاديًّا إلى تابع صنف (class method).

يستقبل تابع الصّنفِ الصّنفَ كمُعاملٍ أول، تمامًا كما يستقبل التّابع العاديّ النّسخة (instance) كمُعامل أولٍ نُشير إليه بالاسم self.

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

class C:
    @classmethod
    def f(cls, arg1, arg2, ...): ...

المعاملات

لا توجد مُعاملات. لكنّ الدّالة المُزخرَفَة f تستقبل المُعامل cls الذي يُشير إلى الصّنف الذي عُرّف عليه التّابع.

أمثلة

المثال التّالي يوضّح كيفيّة تعريف تابع صنفٍ يُعيد اسم الصّنف عند استدعائه:

>>> class Person:
...     @classmethod
...     def f(cls):
...         return cls.__name__ # هذه الخاصّية الخاصّة تسمح لنا بالوصول إلى اسم الصّنف
... 
>>> Person.f() # استدعاء التّابع على الصّنف مباشرةً
'Person'
>>> Person().f() # استدعاء التّابع على نسخةٍ مُباشرةً
'Person'
>>> ahmed = Person() # إنشاء نُسخة من الصّنف
>>> ahmed.f() # استدعاء التّابع على النّسخة
'Person'

ملاحظات

يُمكن استدعاء تابع الصّنف سواء على الصّنف مُباشرةً (مثل C.f()‎) أو على نسخة من الصّنف (مثل ‎C‎‎(‎)‎‎.‎f‎(‎)‎‎). عند استدعاء التّابع على النّسخة، تُتجاهل النّسخة ويُمرَّر صنفُها إلى التّابع، إن استُدعيَ تابع صنفٍ لصنفٍ مشتقّ (derived class)، فسيُمرَّر كائن الصّنف المُشتقّ كمُعاملٍ أولٍ للتّابع.

توابع الأصناف مُختلفة عن التوابع السّاكنة في لغات البرمجة الأخرى مثل Java وC‎+‎+‎. إن أردت استعمال التوابع السّاكنة، فانظر صفحة الدّالة staticmethod().

انظر أيضًا

مصادر