إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

Operator Overloading

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • Operator Overloading

    Operator Overloading in Python

    خاضع للرخصة السفاحية

    1+4 دى إستخدام ال+Operator وهو إن يجمع عددين
    1*2 إستخدام ال Operator * هنا إنه يضرب عددين
    1-2 إستخدام ال – Operator هنا إنه يطرح عددين ولكن !

    هل ينفع يكون ل Operator اكثر من إستخدام ؟
    اها مثلا + Operator بيستخدم فى عمل Concatenation بين ال Strings

    كود:
    >>> s1='Hello, '
    >>> s2='World!'
    >>> s=s1+s2
    >>> s
    'Hello, World!'
    يعنى إستخدمنا ال + Operator فى وظيفة اخرى غير الجمع وهى الدمج دى بإختصار هى ال Overloading Operators .. يعنى يكون ل Operator اكثر من إستخدام.

    فى Special Methods او بتسمى احيانا بال Magical Methods هى اللى بتوفرلنا موضوع ال
    Operator Overloading دا + بعض الأشياء الأخرى
    __add__ للجمع
    __sub__ للطرح
    __mul__ للضرب وهكذا

    فلنفترض إن عندى class وليكن Worker مثلا
    كود:
    class Worker(object):
    
        def __init__(self, name, work_hours):
            self.name=name
            self.work_hours=work_hours
    وانت عايز تعمل زيادة لساعات العمل work_hours او نقصان او مضاعفة ؟!
    فى عدة حلول زى إنك تعمل 3 Methods كالتالى مثلا
    كود:
        def increment_workinghours(self, hours):
            self.work_hours += hours
           return self.work_hours
    
        def decrement_workinghours(self, hours):
            self.work_hours -= hours
           return self.work_hours
    
        def mul_workinghours(self, hours):
            self.work_hours *= hours
           return self.work_hours
    حل آخر : هو إنك تعمل Overload لل Operators ال + و – و * كالتالى

    كود:
        def __add__(self, hours):
            self.work_hours += hours
           return self.work_hours
        def __sub__(self, hours):
            self.work_hours -= hours
           return self.work_hours
    
        def __mul__(self, hours):
            self.work_hours *=hours
            return self.work_hours
    هيكون صورة الكلاس كالتالى

    كود:
    class Worker(object):
    
        def __init__(self, name, work_hours):
            self.name=name
            self.work_hours=work_hours
    
        def increment_workinghours(self, hours):
            self.work_hours += hours
            return self.work_hours
    
        def decrement_workinghours(self, hours):
            self.work_hours -= hours
            return self.work_hours
    
        def mul_workinghours(self, hours):
            self.work_hours *= hours
            return self.work_hours
    
        def __add__(self, hours):
            self.work_hours += hours
            return self.work_hours
    
        def __sub__(self, hours):
            self.work_hours -= hours
            return self.work_hours
    
        def __mul__(self, hours):
            self.work_hours *=hours
            return self.work_hours
    اعمل Object من ال Class وليكن w

    كود:
    >>> w=Worker('EVAN', 4)
    >>> w.increment_workinghours(3)
    7
    >>> w.decrement_workinghours(2)
    5
    >>> w.mul_workinghours(2)
    10
    انا شايف إن الإسلوب دا ممل جدا مع إنه احيانا بيكون اءمن بعض الشئ ولكنه ممل!

    اعمل Object تانى وليكن w1
    كود:
    >>> w1=Worker('ANN', 5)
    >>> w1+2
    7
    >>> w1-4
    3
    >>> w1*5
    15
    Operators you can overload:

    + __add__, __radd__
    - __sub__, __rsub__
    * __mul__, __rmul__
    / __div__, __rdiv__, __truediv__ (for Python 2.2),
    __rtruediv__ (for Python 2.2)
    // __floordiv__, __rfloordiv__ (for Python version 2.2)
    % __mod__, __rmod__
    ** __pow__, __rpow__
    << __lshift__, __rlshift__
    >> __rshift__, __rrshift__
    & __and__, __rand__
    ^ __xor__, __rxor__
    | __or__, __ror__
    += __iadd__
    -= __isub__
    *= __imul__
    /= __idiv__, __itruediv__ (for Python version 2.2)
    //= __ifloordiv__ (for Python version 2.2)
    %= __imod__
    **= __ipow__
    <<= __ilshift__
    >>= __irshift__
    &= __iand__
    ^= __ixor__
    |= __ior__
    == __eq__
    !+, <> __ne__
    > __gt__
    < __lt__
    >= __ge__
    <= __le__
    كود:
    End.
    Programming-Fr34ks[dot]NET
    Ma Weblog
    ابدأ بتعلم Python | Ruby
    كتاب البايثون متوافر الآن
    لا اتواجد بهذا المنتدى ... للإتصال

  • #2
    اهلا وسهلا StrikerX ،،

    موضوع جميل جدا ،،
    وسيكون اجمل عند تطبيقة ب C++ ،، >>>> متعصب جدا لعائلة سي

    حيث لاحظت انك ما راح تقدر تسوي overload لل [] وكذلك -> و ...الخ.

    سي بلس بلس وبكل صراحة هي ملكة لغات البرمجة.

    البايثون تتفوق هنا على الجافا اللي اعتقد انه ما فيها هذي الخاصية

    سؤال بخصوص البايثون ؟؟؟
    هل يوجد فيها دعم للمؤشرات pointers ?? او reference ??

    اتمنى ان تواصل في طرح المواضيع ،، فالمنتدى بحاجة الى دعم الجميع

    الى اللقاء ،،

    تعليق


    • #3
      Thank you man on the study that I do not know the programming terms soon I will study programming Python
      اللسان الطويل دلالة على اليد القصيرة

      تعليق


      • #4
        اهلا وسهلا StrikerX ،،
        موضوع جميل جدا ،،
        وسيكون اجمل عند تطبيقة ب C++ ،، >>>> متعصب جدا لعائلة سي
        اهلاSudaNix منور ، والله الفكرة فيها كلها يعنى المهم إن المغزى يوصل والكود هيكون اسهل بأى لغة

        لاحظت انك ما راح تقدر تسوي overload لل [] وكذلك -> و ...الخ.
        بالنسبة لل Operators زى دا -> عمرى ماستخدمته ولاأعتقد إن ليه إستخدام لأن مش فى Pointers من الأساس ، وال [] مش ليها إستخدام غير ال Containers

        البايثون تتفوق هنا على الجافا اللي اعتقد انه ما فيها هذي الخاصية
        جافا مش بتدعم ال Operator Overloading بتستخدم .multiply و .add مش ظريفة!
        هل يوجد فيها دعم للمؤشرات pointers ?? او reference ??
        تقدر تستخدم ref ل Object لوبخصوص ال Pointers غير مدعمة لأنها unsafe

        مثال على إستخدام ال Ref
        كود:
        >>> l=[1, 2, 3]
        >>> l_ref=l
        >>> l += [4, 5]
        >>> l
        [1, 2, 3, 4, 5]
        >>> l_ref
        [1, 2, 3, 4, 5]
        >>> l_ref.remove(5)
        >>> l
        [1, 2, 3, 4]
        >>> l_ref
        [1, 2, 3, 4]

        المشاركة الأصلية بواسطة Linux abo3abed مشاهدة المشاركة
        Thank you man on the study that I do not know the programming terms soon I will study programming Python
        Don't mention!
        Programming-Fr34ks[dot]NET
        Ma Weblog
        ابدأ بتعلم Python | Ruby
        كتاب البايثون متوافر الآن
        لا اتواجد بهذا المنتدى ... للإتصال

        تعليق


        • #5
          تشكر يا باشا :clown:

          تعليق


          • #6
            عفوا ، نورت ياباشا
            Programming-Fr34ks[dot]NET
            Ma Weblog
            ابدأ بتعلم Python | Ruby
            كتاب البايثون متوافر الآن
            لا اتواجد بهذا المنتدى ... للإتصال

            تعليق

            يعمل...
            X