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

السؤال

نشر

باعتبار الكود التالي:

>>> class A(object):
...   def __init__(self, a):
...     self.a = a
...   def __eq__(self, other):
...     return self.a==other.a
... 
>>> a=A(1)
>>> b=A(1)
>>> c=A(2)

>>> a==b
True                      
>>> a==c
False                    
>>> a is b
False                   
>>> l = [b,c]
>>> a in l
True                    

هل يمكن استعمال In عوض __eq__؟ وكيف أتأكد من أن العنصر غير موجود داخل المصفوفة، عبر التأكد بقيمة id وليس value؟

Recommended Posts

  • 1
نشر (معدل)

يمكن استعمال دالة ()any  للتأكد من ذلك عن طريق:

any(o is a for o in l)

وتعطينا:

x in s
 
True تعيد
S داخل xفي حال كان 
عكس ذلك else و

ويمكن أيضا الاستعانة بالكلاس التالية التي تساعدنا على التأكد من وجود عنصر داخل مصفوفة:

class IdentityWrapper(object):
    def __init__(self, ob):
        self.ob = ob
    def __eq__(self, other):
        return other is self.ob

استخدام دالة ()any:

class IdentityList(list):
    def __contains__(self, other):
        return any(o is other for o in self)

مثال تطبيقي للكلاس:

>>> il = IdentityList(l)
>>> a in il
False
>>> a in IdentityList(l + [a])
True

 

تم التعديل في بواسطة E.Nourddine

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...