اهلا ومرحبا بكم في مدونه : Cyber1101 انظم للمجتمع

Overriding Python

 



مفهوم ال overriding في بايثون


الـ Overriding في بايثون يشير إلى تعديل أو استبدال نمط سلوك معيّن لدالة موروثة من الفئة الأساسية (الأب) في فئة مشتقة (الابن). وهذا يتيح للمبرمج إعادة تعريف دالة معينة من الفئة الأساسية بشكل مختلف في الفئة المشتقة.

لتطبيق overriding في بايثون، يجب تعريف الدالة في الفئة المشتقة بنفس الاسم والتوقيع (signature) كما هو موجود في الفئة الأساسية، ويمكن اضافة المزيد من السلوك الجديد داخل الدالة المعدّلة. عند استدعاء الدالة من الكائن المشتق، سيتم استدعاء التعريف المعدّل في الفئة المشتقة بدلاً من التعريف في الفئة الأساسية.

فيما يلي مثال بسيط يوضح مفهوم overriding:


class A:
    def my_func(self):
        print("Hello from class A")
class B(A):
    def my_func(self):
        print("Hello from class B")
obj_a = A()
obj_b = B()
obj_a.my_func()  # Output: "Hello from class A"
obj_b.my_func()  # Output: "Hello from class B"



في هذا المثال، تم تعريف الدالة my_func في الفئة A وتم استخدامها كنمط سلوك للفئة. ثم تم تعريف الفئة B التي ترث من A ولكن تستبدل دالة my_func بتعريف جديد. عند استدعاء my_func على كائن obj_a الذي ينتمي إلى الفئة A ، يتم طباعة "Hello from class A". أما عند استدعاء my_func على كائن obj_b الذي ينتمي إلى الفئة B ، يتم طباعة "Hello from class B" بدلاً من نمط السلوك الأصلي في الفئة الأساسية.


امثله علئ ال overriding في بايثون


في بايثون، يمكنك القيام بالـ overriding عن طريق إعادة تعريف الدالة في الفصل المشتق. وهذا مثال بسيط:


class Animal:
    def sound(self):
        print("Unknown sound")
class Cat(Animal):
    def sound(self):
        print("Meow")
class Dog(Animal):
    def sound(self):
        print("Woof")
cat = Cat()
dog = Dog()
cat.sound() # Output: Meow
dog.sound() # Output: Woof



في هذا المثال، قمنا بإنشاء فئة Animal التي تحتوي على دالة sound() التي تطبع "Unknown sound". ثم قمنا بإنشاء فصول جديدة Cat و Dog المشتقة من Animal . وفي كل فصل، أعدنا تعريف الدالة sound() لتطبع صوت الحيوان المناسب.


عند استدعاء الأسلوب sound() على كائنات Cat و Dog ، سيتم تشغيل الإصدار المناسب للدالة sound() المعرف في كل فئة مشتقة، نتيجةً يتم طباعة "Meow" لكائن cat و "Woof" لكائن dog .


الداله super()


الدالة super() هي دالة مدمجة في Python تستخدم للوصول إلى الأسلوب (method) الذي يأتي من فئة أساسية (base class) في التراث (inheritance) الخاص بالكائن المحدد.

عند استخدام التوريث في Python، قد يكون لديك عدة فئات تفيد من بعضها البعض. عند كتابة أسلوب جديد في الفئة المشتقة (derived class)، يمكن استخدام super() للوصول إلى نفس الأسلوب في الفئة الأساسية وتنفيذه داخل الأسلوب الجديد. وهذا يزود الكود بمرونة أكبر ويمكّن الأسلوب الجديد من احتواء مزيدٍ من السلوك.

في الإصدارات الحديثة من Python، يمكن استخدام super() بدون أية معاملات، حيث تقوم Python تلقائيًا بتحديد الفئة الأساسية والأسلوب المطلوب وفقًا للسياق الذي يتم استخدام super() فيه.

امثله على دالة super()


في Python، يُمكن استخدام دالة super() للوصول إلى الأسلوب (Method) في الفئة الأساسية (Parent Class) بدلاً من استخدام اسم الفئة الأساسية مباشرةً. وهذا يحدث بشكل خاص في حالة وجود توريث (Inheritance) بين الفئتين.


فيما يلي مثالٌ يوضح استخدام دالة super() :



class Parent:
    def __init__(self, name):
        self.name = name
class Child(Parent):
    def __init__(self, name, age):
        super().__init__(name)
        self.age = age



في المثال أعلاه، يتم استخدام super() في الأسلوب __init__() في الفئة الفرعية Child للوصول إلى الأسلوب __init__() في الفئة الأساسية Parent وتمرير المعاملات اللازمة لإنشاء الكائن.

إرسال تعليق

Cookie Consent
We serve cookies on this site to analyze traffic, remember your preferences, and optimize your experience.
Oops!
It seems there is something wrong with your internet connection. Please connect to the internet and start browsing again.
AdBlock Detected!
We have detected that you are using adblocking plugin in your browser.
The revenue we earn by the advertisements is used to manage this website, we request you to whitelist our website in your adblocking plugin.
Site is Blocked
Sorry! This site is not available in your country.