تقنية

singledispatch في بايثون: لماذا تصل True إلى فرع int؟

Only int registered: route(True), route(False): int.
التسجيل الموروث.

bool ترث int؛ عند غياب تسجيل خاص لنوع، singledispatch تبحث في ترتيب الوراثة عن تنفيذ أعم. [1] [2]

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

وراثة النوع تتيح اختيار int هنا. [1] [2]

  • bool ترث int؛ عند غياب تسجيل خاص لنوع، singledispatch تبحث في ترتيب الوراثة عن تنفيذ أعم. [1] [2]
  • على CPython 3.12.14، route تعيد "base" افتراضيًا؛ تسجيل int يعيد "int". [1] [2]
  • قبل تسجيل bool: route(True) وroute(False) تعيدان "int"؛ نوع القيمتين bool. [1] [2]
  • بعد تسجيل bool ليعيد "bool": النداءان يعيدان "bool"؛ التسجيل الخاص يغير الاختيار. [1] [2]
  • تحكم: route(4) تبقى "int" وroute("4") تبقى "base" قبل التسجيل وبعده. نختبر أنواعًا مدمجة، دون فئات مجردة أو وراثة مخصصة. [1] [2]

قاعدة الوراثة

bool ترث int؛ عند غياب تسجيل خاص لنوع، singledispatch تبحث في ترتيب الوراثة عن تنفيذ أعم. [1] [2]

الدالة والتسجيل

على CPython 3.12.14، route تعيد "base" افتراضيًا؛ تسجيل int يعيد "int". [1] [2]

غياب التسجيل الخاص

قبل تسجيل bool: route(True) وroute(False) تعيدان "int"؛ نوع القيمتين bool. [1] [2]

from functools import singledispatch @singledispatch def route(value):return "base" @route.register(int) def route_int(value):return "int" print(route(True),route(False),route(4),route("4")) [1] [2]

int and bool registered: route(True), route(False): bool.
التسجيل الخاص.

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

بعد تسجيل bool ليعيد "bool": النداءان يعيدان "bool"؛ التسجيل الخاص يغير الاختيار. [1] [2]

@route.register(bool) def route_bool(value):return "bool" print(route(True),route(False),route(4),route("4")) [1] [2]

تحكم: route(4) تبقى "int" وroute("4") تبقى "base" قبل التسجيل وبعده. نختبر أنواعًا مدمجة، دون فئات مجردة أو وراثة مخصصة. [1] [2]

المراجع

  1. Python dispatch inheritance
  2. Python bool inheritance

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

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