unsafe_hash=True مع __hash__ مكتوبة في الفئة يرفع TypeError؛ المزخرف لا يجمع الطلبين. [1]
الخلاصة السريعة
لا؛ تعريف Bad يرفض هنا. [1]
- unsafe_hash=True مع __hash__ مكتوبة في الفئة يرفع TypeError؛ المزخرف لا يجمع الطلبين. [1]
- على CPython 3.12.14، Bad تعرف number:int وطريقة __hash__ تعيد 17؛ نطبق @dataclass(unsafe_hash=True). [1]
- تطبيق المزخرف يرفع TypeError أثناء التعريف، قبل إنشاء مثيل أو استدعاء hash عليه. [1]
- تحكم مستقل: Fixed تعرف number:int وطريقة __hash__ تعيد 17؛ نستخدم @dataclass بالإعدادات الافتراضية، ومنها unsafe_hash=False. [1]
- control=Fixed(4) تنجح: control.number هي 4، وhash(control) تعطي 17 من الطريقة المكتوبة. نختبر تعارض خيار التوليد مع طريقة مباشرة، دون وراثة أو تجميد؛ القيمة الثابتة تحكم للاختبار. [1]
تعارض الخيار والطريقة
unsafe_hash=True مع __hash__ مكتوبة في الفئة يرفع TypeError؛ المزخرف لا يجمع الطلبين. [1]
توليد مطلوب وطريقة موجودة
على CPython 3.12.14، Bad تعرف number:int وطريقة __hash__ تعيد 17؛ نطبق @dataclass(unsafe_hash=True). [1]
رفض التعريف
تطبيق المزخرف يرفع TypeError أثناء التعريف، قبل إنشاء مثيل أو استدعاء hash عليه. [1]
from dataclasses import dataclass try: @dataclass(unsafe_hash=True) class Bad: number:int def __hash__(self):return 17 except TypeError:print("TypeError") [1]

الافتراضي والتحكم
تحكم مستقل: Fixed تعرف number:int وطريقة __hash__ تعيد 17؛ نستخدم @dataclass بالإعدادات الافتراضية، ومنها unsafe_hash=False. [1]
@dataclass class Fixed: number:int def __hash__(self):return 17 control=Fixed(4) print(control.number,hash(control)) [1]
control=Fixed(4) تنجح: control.number هي 4، وhash(control) تعطي 17 من الطريقة المكتوبة. نختبر تعارض خيار التوليد مع طريقة مباشرة، دون وراثة أو تجميد؛ القيمة الثابتة تحكم للاختبار. [1]
المراجع
للتوسع: لغات البرمجة.
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
