بايثونالدوال الثابتة
- مفهوم الدوال الثابتة
- أمثلة شاملة
مفهوم الدوال الثابتة
الدالة الثابتة ( Static Method ) هي دالة تابعة لكلاس محدد و يمكن الوصول إليها مباشر منه بدون الحاجة إلى إنشاء كائن منه.
الدالة الثابتة يمكن استدعاءها بشكل مباشر من الكلاس الموضوعة بداخله.
يمكن استدعاء الدالة الثابتة من خلال كائن تم إنشاؤه من الكلاس الذي يحتويها و لكن الأصل أن يتم استدعاءها من الكلاس نفسه. و حتى لو تم استدعاءها من كائن فإنه لن يتم التعامل معها بالنسبة لهذا الكائن بل سيبقى كأنها تُستدعى بشكل مباشر من الكلاس.
شروط تعريف دالة ثابتة
- الدالة الثابتة يتم تعريفها كأي دالة عادية في الكلاس مع وضع الكلمة @staticmethod فوقها كمؤشر على أنها دالة ثابتة.
- يمنع وضع الكلمة self بداخلها لأن هذه الكلمة تُستخدم في الأصل للوصول للخصائص التي سيملكها أي كائن يتم إنشاؤه من الكلاس.
- للوصول إلى أي متغير موضوع في الكلاس من دالة ثابتة نكتب إسم الكلاس، يليه نقطة، يليه إسم المتغير.
الدالة الثابتة في الكلاس تكون بمثابة دالة عامة في الكلاس نفسه و ليس الهدف منها التعامل مع خصائص كائن يتم إنشاؤه منه و لذلك يمنع وضع الكلمة self كباراميتر فيها، في حين أن دالة العادية في الكلاس تكون بمثابة دالة خاصة للكائنات التي ننشئها منه نكون مجبرين على إضافتها كباراميتر فيها.
أمثلة شاملة
في المثال التالي قمنا بتعريف كلاس إسمه StaticExample وضعنا فيه دالة ثابتة إسمها print_msg() مهمتها فقط طباعة جملة عادية.
المثال الأول
نتيجة تشغيل الملف Test
.
في المثال التالي قمنا بتعريف كلاس إسمه Session وضعنا فيه 4 متغيرات ( title - language - teacher - credits ) بالإضافة إلى دالة ثابتة إسمها print_info() مهمتها طباعة قيم هذه المتغيرات بطريقة مرتبة.
المثال الثاني
نتيجة تشغيل الملف Test
.
Language: English
Teacher: Sara Smith
Credit Number: 5
في المثال التالي قمنا بتعريف كلاس إسمه MyTools وضعنا فيه دالة ثابتة إسمها print_words_count() الهدف منها طباعة عدد الكلمات الموجودة في النص الذي نمرره لها عند استدعائها.
المثال الثالث
نتيجة تشغيل الملف Test
.
المثال التالي يثبت لك فكرة أنه إن تم إستدعاء الدالة الثابتة من كائن من الكلاس الموجودة فيه، فإنه لن يتم التعامل مع هذه الدالة بشكل خاص بالنسبة للكائن. أي سواء قمت باستدعائها من الكائن أو من الكلاس ستحصل على نفس النتيجة مع الإشارة إلى أنه يفضل دائماً إستدعاء الدالة الثابتة بشكل مباشر من الكلاس الموجودة فيه و ليس من كائن منه.
المثال الرابع
نتيجة تشغيل الملف Test
.
StaticExample.x = 5
obj.x = 10