تقنية

singledispatchmethod في بايثون: هل نوع self يحدد الفرع؟

own.route(4) تعيد int.
نوع value.

singledispatchmethod تختار بحسب أول وسيط بعد self أو cls؛ في طريقتنا هو value. [1]

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

لا؛ نوع value يحدد الفرع هنا. [1]

  • singledispatchmethod تختار بحسب أول وسيط بعد self أو cls؛ في طريقتنا هو value. [1]
  • على CPython 3.12.14، Formatter.route تعيد النص base افتراضيًا؛ نسجل النوع int ليعيد النص int. [1]
  • own.route(4) تعيد int، وown.route("4") تعيد base؛ self هي own نفسها في الاستدعاءين. [1]
  • تحكم بدالة plain من singledispatch: plain(own,4) تعيد base؛ العدد الثاني لا يختار فرع int. [1]
  • plain(4,own) تعيد int لأن العدد أولًا. نقارن دالة بطريقتنا المرتبطة بمثيل؛ لا نختبر classmethod أو وراثة مخصصة. [1]

وسيط الاختيار

singledispatchmethod تختار بحسب أول وسيط بعد self أو cls؛ في طريقتنا هو value. [1]

الافتراضي والتسجيل

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

الطريقة المرتبطة

own.route(4) تعيد int، وown.route("4") تعيد base؛ self هي own نفسها في الاستدعاءين. [1]

from functools import singledispatchmethod,singledispatch class Formatter: @singledispatchmethod def route(self,value):return "base" @route.register(int) def route_int(self,value):return "int" own=Formatter() print(own.route(4),own.route("4")) [1]

plain(own,4) تعيد base.
نوع الأول.

الدالة والتحكم

تحكم بدالة plain من singledispatch: plain(own,4) تعيد base؛ العدد الثاني لا يختار فرع int. [1]

@singledispatch def plain(first,second):return "base" @plain.register(int) def plain_int(first,second):return "int" print(plain(own,4),plain(4,own)) [1]

plain(4,own) تعيد int لأن العدد أولًا. نقارن دالة بطريقتنا المرتبطة بمثيل؛ لا نختبر classmethod أو وراثة مخصصة. [1]

المراجع

  1. Python singledispatchmethod/singledispatch

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

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