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

من موسوعة حسوب
إضافة الصّفحة
 
ط استبدال النص - 'Python/defining-functions' ب'Python/defining_functions'
 
(4 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:الدالة <code>classmethod()‎</code> في بايثون}}</noinclude>
<noinclude>{{DISPLAYTITLE:الدالة <code>classmethod()‎</code> في بايثون}}</noinclude>
تُحوّل الدّالة <code>classmethod()‎</code> المُزخرِفةُ (decorator) تابعًا عاديًّا إلى تابع صنف (class method).
الدّالة <code>classmethod()‎</code> [https://academy.hsoub.com/programming/python/%D8%A7%D9%84%D9%85%D8%B2%D8%AE%D8%B1%D9%81%D8%A7%D8%AA-decorators-%D9%81%D9%8A-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-r303/ مُزخرفٌ] يُحوّل تابعًا عاديًّا في صنف ما إلى تابع صنف (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|تعريف الدوال في بايثون]].
* الدالة <code>[[Python/staticmethod|staticmethod()‎]]</code>: تحوّل تابعًا إلى تابعٍ ساكن (static).


== مصادر ==
== مصادر ==

المراجعة الحالية بتاريخ 14:29، 29 مايو 2018

الدّالة classmethod()‎ مُزخرفٌ يُحوّل تابعًا عاديًّا في صنف ما إلى تابع صنف (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().

انظر أيضًا

مصادر