تقنية

repr=True في dataclass: هل تستبدل __repr__ المخصصة؟

repr(own): bud.
العرض المخصص باق.

repr=True تطلب توليد __repr__؛ إذا عرفتها الفئة بنفسها، يتجاهل dataclass هذا الخيار. [1]

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

لا؛ طريقتنا تبقى مستخدمة. [1]

  • repr=True تطلب توليد __repr__؛ إذا عرفتها الفئة بنفسها، يتجاهل dataclass هذا الخيار. [1]
  • على CPython 3.12.14، Box تعرف number وطريقة __repr__ تعيد bud؛ نحفظ الطريقة في saved قبل تطبيق dataclass(Box,repr=True). [1]
  • own=Decorated(4): own.number هي 4، وrepr(own) تعطي bud من طريقتنا. [1]
  • Decorated.__repr__ is saved تعطي True؛ بقيت دالة العرض نفسها بعد تطبيق المزخرف. [1]
  • تحكم مستقل: Plain تعرف number دون طريقة عرض خاصة؛ repr=True تولدها. control=Plain(4)، وrepr(control) تعطي Plain(number=4). نختبر طريقة مكتوبة مباشرة بلا وراثة أو استبعاد حقول من العرض. [1]

شرط توليد العرض

repr=True تطلب توليد __repr__؛ إذا عرفتها الفئة بنفسها، يتجاهل dataclass هذا الخيار. [1]

طريقة قبل المزخرف

على CPython 3.12.14، Box تعرف number وطريقة __repr__ تعيد bud؛ نحفظ الطريقة في saved قبل تطبيق dataclass(Box,repr=True). [1]

عرض مخصص باق

own=Decorated(4): own.number هي 4، وrepr(own) تعطي bud من طريقتنا. [1]

from dataclasses import dataclass class Box: number:int def __repr__(self):return "bud" saved=Box.__repr__ Decorated=dataclass(Box,repr=True) own=Decorated(4) print(own.number,repr(own)) print(Decorated.__repr__ is saved) [1]

repr(control): Plain(number=4).
تحكم العرض مولد.

هوية الطريقة والتحكم

Decorated.__repr__ is saved تعطي True؛ بقيت دالة العرض نفسها بعد تطبيق المزخرف. [1]

@dataclass(repr=True) class Plain:number:int control=Plain(4) print(control.number,repr(control)) [1]

تحكم مستقل: Plain تعرف number دون طريقة عرض خاصة؛ repr=True تولدها. control=Plain(4)، وrepr(control) تعطي Plain(number=4). نختبر طريقة مكتوبة مباشرة بلا وراثة أو استبعاد حقول من العرض. [1]

المراجع

  1. Python repr

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

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