تقنية

total_ordering في بايثون: هل تنشئ مقارنة المساواة؟

Item: نتائج المساواة والأصغر والأصغر أو يساوي كلها False.
مساواة موروثة.

total_ordering تستكمل مقارنات الترتيب؛ لا تنشئ __eq__ في مثالنا. [1] [2]

الخلاصة السريعة

لا؛ نكتب مقارنة المساواة للقيم. [1] [2]

  • total_ordering تستكمل مقارنات الترتيب؛ لا تنشئ __eq__ في مثالنا. [1] [2]
  • على CPython 3.12.14، Item تعرف __lt__ فقط للمقارنة؛ كائنان مختلفان منها يحملان 4. [1] [2]
  • Item.__eq__ is object.__eq__ تعطي True؛ left==right تعطي False رغم تساوي القيم المخزنة. [1] [2]
  • left<right وleft<=right تعطيان False؛ الاشتقاق من __lt__ يستعمل المساواة أيضًا في <=. [1] [2]
  • تحكم EqualItem بالقيمة 4 و__eq__ للقيم: المساواة True، والأصغر False، والأصغر أو يساوي True. [1] [2]

ترتيب ومساواة

total_ordering تستكمل مقارنات الترتيب؛ لا تنشئ __eq__ في مثالنا. [1] [2]

فئة المثال

على CPython 3.12.14، Item تعرف __lt__ فقط للمقارنة؛ كائنان مختلفان منها يحملان 4. [1] [2]

المساواة الموروثة

Item.__eq__ is object.__eq__ تعطي True؛ left==right تعطي False رغم تساوي القيم المخزنة. [1] [2]

from functools import total_ordering @total_ordering class Item: def __init__(self,n):self.n=n def __lt__(self,other):return self.n<other.n left,right=Item(4),Item(4) print(Item.__eq__ is object.__eq__) print(left==right,left<right,left<=right) [1] [2]

EqualItem: النتائج True، False، True بالترتيب نفسه.
مساواة للقيم.

الاشتقاق والتحكم

left<right وleft<=right تعطيان False؛ الاشتقاق من __lt__ يستعمل المساواة أيضًا في <=. [1] [2]

@total_ordering class EqualItem: def __init__(self,n):self.n=n def __lt__(self,other):return self.n<other.n def __eq__(self,other):return self.n==other.n a,b=EqualItem(4),EqualItem(4) print(a==b,a<b,a<=b) [1] [2]

تحكم EqualItem بالقيمة 4 و__eq__ للقيم: المساواة True، والأصغر False، والأصغر أو يساوي True. [1] [2]

المراجع

  1. Python total_ordering
  2. CPython 3.12.14 functools

للتوسع: لغات البرمجة.

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.