تقنية

compare=False في dataclass: هل اختلاف الحقل يمنع المساواة؟

left==right تعطي True مع اختلاف note.
المستبعد لا يمنع.

compare=False تستبعد note من المساواة المولدة؛ لا تحذف قيمة الحقل من كائننا. [1]

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

لا؛ اختلاف note لا يمنع المساواة هنا. [1]

  • compare=False تستبعد note من المساواة المولدة؛ لا تحذف قيمة الحقل من كائننا. [1]
  • على CPython 3.12.14، left وright من Row نفسها، ولهما key=2؛ note هي bud للأول وleaf للثاني. [1]
  • left==right تعطي True؛ key تشارك في المقارنة، وnote معرفة بـfield(compare=False). [1]
  • left.note وright.note تبقيان bud وleaf؛ مساواة الكائنين لا تعني تطابق الحقل المستبعد. [1]
  • تحكم: Row(3,"bud") تختلف عن left، فالمقارنة تعطي False رغم تطابق note. نختبر مساواة مولدة لفئة واحدة، دون هاش أو ترتيب أو مساواة مخصصة. [1]

المشاركة في المقارنة

compare=False تستبعد note من المساواة المولدة؛ لا تحذف قيمة الحقل من كائننا. [1]

كائنان وفئة واحدة

على CPython 3.12.14، left وright من Row نفسها، ولهما key=2؛ note هي bud للأول وleaf للثاني. [1]

المساواة المولدة

left==right تعطي True؛ key تشارك في المقارنة، وnote معرفة بـfield(compare=False). [1]

from dataclasses import dataclass,field @dataclass class Row: key:int note:str=field(compare=False) left=Row(2,"bud");right=Row(2,"leaf") print(left==right) [1]

left==control تعطي False مع اختلاف key.
المشارك يغير.

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

left.note وright.note تبقيان bud وleaf؛ مساواة الكائنين لا تعني تطابق الحقل المستبعد. [1]

print(left.note,right.note) control=Row(3,"bud") print(left==control) [1]

تحكم: Row(3,"bud") تختلف عن left، فالمقارنة تعطي False رغم تطابق note. نختبر مساواة مولدة لفئة واحدة، دون هاش أو ترتيب أو مساواة مخصصة. [1]

المراجع

  1. Python dataclass/field

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

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