تقنية

order=True في dataclass: هل يقبل __lt__ مكتوبة في الفئة؟

Bad order=True + __lt__: TypeError.
رفض التوليد مع الطريقة.

order=True تطلب توليد المقارنات؛ وجود __lt__ مكتوبة في الفئة يجعل التعريف يرفع TypeError. [1]

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

لا؛ التعريف يرفض في مثالنا. [1]

  • order=True تطلب توليد المقارنات؛ وجود __lt__ مكتوبة في الفئة يجعل التعريف يرفع TypeError. [1]
  • على CPython 3.12.14، Bad تعرف number:int وطريقة __lt__ تقارن self.number وother.number؛ نطبق @dataclass(order=True). [1]
  • تطبيق المزخرف يرفع TypeError أثناء تعريف Bad، قبل إنشاء مثيل أو إجراء مقارنة. نترك eq بافتراضي True. [1]
  • تحكم: Fixed تعرف الحقل والطريقة نفسيهما، وتستخدم @dataclass دون خيارات؛ افتراضي order هو False. [1]
  • left=Fixed(4) وright=Fixed(5) تنجحان؛ left<right تعطي True بالطريقة المكتوبة، وتبقى القيمتان 4 و5. لا نختبر وراثة أو total_ordering أو توليد جميع المقارنات. [1]

توليد مع طريقة موجودة

order=True تطلب توليد المقارنات؛ وجود __lt__ مكتوبة في الفئة يجعل التعريف يرفع TypeError. [1]

تعريف المقارنة

على CPython 3.12.14، Bad تعرف number:int وطريقة __lt__ تقارن self.number وother.number؛ نطبق @dataclass(order=True). [1]

موضع الرفض

تطبيق المزخرف يرفع TypeError أثناء تعريف Bad، قبل إنشاء مثيل أو إجراء مقارنة. نترك eq بافتراضي True. [1]

from dataclasses import dataclass try: @dataclass(order=True) class Bad: number:int def __lt__(self,other):return self.number<other.number except TypeError:print("TypeError") [1]

Fixed order=False; left < right: True.
الافتراضي يسمح بالطريقة.

الافتراضي والتحكم

تحكم: Fixed تعرف الحقل والطريقة نفسيهما، وتستخدم @dataclass دون خيارات؛ افتراضي order هو False. [1]

@dataclass class Fixed: number:int def __lt__(self,other):return self.number<other.number left=Fixed(4);right=Fixed(5) print(left<right,left.number,right.number) [1]

left=Fixed(4) وright=Fixed(5) تنجحان؛ left<right تعطي True بالطريقة المكتوبة، وتبقى القيمتان 4 و5. لا نختبر وراثة أو total_ordering أو توليد جميع المقارنات. [1]

المراجع

  1. Python order and lt

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

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