تقنية

order=True في dataclass: هل يعمل مع eq=False؟

order=True وorder=True; eq=False: ValueError عند التزيين.
الخياران غير متوافقين.

order=True مع eq=False ترفع ValueError؛ إعدادا الترتيب والمساواة غير متوافقين هنا. [1]

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

لا؛ تعريف الفئة يفشل في اختبارنا. [1]

  • order=True مع eq=False ترفع ValueError؛ إعدادا الترتيب والمساواة غير متوافقين هنا. [1]
  • على CPython 3.12.14، Bad تعرف number وتطلب order=True مع eq=False. [1]
  • الخطأ يقع عند تطبيق المزخرف أثناء تعريف Bad، قبل إنشاء مثيل أو مقارنة قيمتين. [1]
  • بعد التقاط ValueError، الاسم Bad غير مربوط في نطاق اختبارنا الجديد. [1]
  • تحكم Fixed تطلب order=True وتترك eq بافتراضي True: Fixed(4)<Fixed(5) تعطي True، وكائنان منفصلان بالقيمة 4 متساويان. نختبر حقلًا واحدًا بأعداد صحيحة بلا وراثة أو مقارنات مخصصة. [1]

الخياران

order=True مع eq=False ترفع ValueError؛ إعدادا الترتيب والمساواة غير متوافقين هنا. [1]

تعريف غير متوافق

على CPython 3.12.14، Bad تعرف number وتطلب order=True مع eq=False. [1]

موضع الفشل

الخطأ يقع عند تطبيق المزخرف أثناء تعريف Bad، قبل إنشاء مثيل أو مقارنة قيمتين. [1]

from dataclasses import dataclass try: @dataclass(order=True,eq=False) class Bad:number:int except ValueError:print("ValueError") print("Bad" in globals()) [1]

مع eq الافتراضي: Fixed(4)<Fixed(5) تعطي True.
افتراضي المساواة يقبل.

الاسم والتحكم

بعد التقاط ValueError، الاسم Bad غير مربوط في نطاق اختبارنا الجديد. [1]

@dataclass(order=True) class Fixed:number:int left=Fixed(4);right=Fixed(5);control=Fixed(4) print(left<right,left==control,left is not control) [1]

تحكم Fixed تطلب order=True وتترك eq بافتراضي True: Fixed(4)<Fixed(5) تعطي True، وكائنان منفصلان بالقيمة 4 متساويان. نختبر حقلًا واحدًا بأعداد صحيحة بلا وراثة أو مقارنات مخصصة. [1]

المراجع

  1. Python order/eq

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

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