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 تعرف الحقل والطريقة نفسيهما، وتستخدم @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]
المراجع
للتوسع: لغات البرمجة.
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
