اذهب إلى المحتوى
  • 0

كيف يمكن استخدام التوابع السحرية في بايثون ومتى يكون ذلك ضروريًا؟

سيف الدين حسنات

السؤال

ما هو التابع السحري و كيف يعمل 

ومتى احتاج استخدامه؟؟ 

تم التعديل في بواسطة Mustafa Suleiman
تعديل عنوان السؤال
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

التابع السحري هو تابع يبدأ و ينتهي ب __ أي رمزين underscore.

هو لا يعمل مثل التوابع العادية، بالطبع يمكنك استدعاءه بشكل مباشرة و لكن الفكرة منه أن يعمل بدون ذلك.

كيفية عمله و متى تحتاج لاستعماله يختلف باختلاف التابع السحري، مثلاً التابع __init__ هو تابع سحري، و هو يستعمل لتهيئة الغرض من صنف معين، اي أنه مثل الباني، أنت لا تقوم باستدعاءه مباشرة بل يستدعى تلقائياً عند إنشاء الغرض، و بالتالي من الممكن أن تستفيد منه بوضع بعض العمليات التي تريد القيام بها عندما يتم إنشاء غرض من الصنف.

هناك الكثير من التوابع السحرية سأذكر أهمها و لاحقاً ستتعرف على غيرها عند الحاجة.

  • __len__ يستعمل لإرجاع طول غرض من هذا الصنف، هذا التابع مفيد في حال كان الصنف يمثل حاوية عناصر، و يتم استدعاء هذا التابع عند تمرير غرض من الصنف إلى الدالة len.
  • __str__ يستعمل لإرجاع تمثيل نصي للغرض، هذا التابع يتم استدعاءه عند طباعة الغرض، أو في أي مكان يجب تحويل الغرض فيه إلى سلسلة نصية.
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

ما التابع السحري (Magic Method) هو مصطلح يشير إلى مجموعة من الدوال الخاصة التي تحمل اسمًا خاصًا بدايةً ونهايةً بشرطة سفلية (underscore) من كلا الجانبين.

وتعمل تلك الدوال الخاصة في ظروف محددة عند حدوث أنواع معينة من الأحداث في الكلاس، مثل إنشاء الكائنات، الجمع بينها، تحويل الأنواع، وغيرها.

والتابع السحري الأكثر شيوعًا هو __init__() الذي يُستخدم لبناء المُثيلات (الكائنات) عند إنشائها من الكلاس، وعند استدعاء الكلاس لإنشاء كائن جديد، سيتم تفعيل هذا التابع للقيام بإعداد الكائن، وإليك مثال:

class MyClass:
    def __init__(self, value):
        self.value = value
        print("تم إنشاء كائن!")

obj1 = MyClass(10) # سيطبع: تم إنشاء كائن!

بالإضافة إلى __init__()، هناك العديد من التوابع السحرية الأخرى مثل __str__() لتمثيل الكائن على شكل سلسلة نصية عند استخدام print()، و __add__() لتحديد سلوك الجمع بين كائنين من نوع الكلاس.

وباستطاعتك استخدام التوابع السحرية عندما تريد تغيير سلوك الكائنات في الكلاس ليتماشى مع احتياجاتك.

مثلاً إن كان لديك كلاس يمثل متجرًا على الإنترنت وتريد تعريف سلوك الجمع بين عناصر المتجر، فيمكنك استخدام التابع السحري __add__() لأنه سيتم استدعاؤه عند استخدام العملية الحسابية + بين كائنين من هذا الكلاس.

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

إليك بعض الأمثلة على استخدام التوابع السحرية:

__init__(): هذه الدالة السحرية هي دالة منشئة، وتُستخدم لإنشاء كائن جديد. يتم استدعاؤها تلقائيًا عند إنشاء كائن جديد. على سبيل المثال، الكود التالي ينشئ كائنًا من فئة Person ويعيين المتغيرات name و age على القيم John Doe و 21 على التوالي:

class Person:
  def __init__(self, name, age):
    self.name = name
    self.age = age

p = Person('John Doe', 21)
print(p.name) # John Doe
print(p.age) # 21

__str__(): هذه الدالة السحرية هي دالة سلسلية، وتُستخدم لإنشاء سلسلة من كائن. يتم استدعاؤها تلقائيًا عندما يتم تحويل كائن إلى سلسلة. على سبيل المثال، الكود التالي ينشئ كائنًا من فئة Person ويعيد سلسلة تحتوي على اسم وعمر الكائن:

class Person:
  def __str__(self):
    return f'{self.name} is {self.age} years old'

p = Person('John Doe', 21)
print(p) # John Doe is 21 years old

__lt__() و __gt__(): هذه الدوال السحرية هي دوال مقارنة، وتُستخدم لمقارنة كائنين. يتم استدعاؤها تلقائيًا عندما يتم مقارنة كائنين. على سبيل المثال، الكود التالي يقارن كائنين من فئة Person بناءً على عمرهم:

class Person:
  def __lt__(self, other):
    return self.age < other.age

p1 = Person('John Doe', 21)
p2 = Person('Jane Doe', 22)

print(p1 < p2) # True

هذه مجرد أمثلة قليلة على استخدام التوابع السحرية. يمكن استخدام التوابع السحرية في العديد من السياقات الأخرى.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...