ما الفرق بين __reduce__ و __reduce_ex__؟
سؤال
أدرك أن هذه الطرق مخصصة للتخليل/التفكيك وليس لها علاقة بوظيفة التخفيض المضمنة، ولكن ما الفرق بين الاثنين ولماذا نحتاج إلى كليهما؟
المحلول
المستندات قل ذلك
إذا توفرت، في وقت التخليل
__reduce__()
سيتم استدعاؤه بدون وسيطات ، ويجب أن يعيد إما سلسلة أو tuple.
على الجانب الآخر،
من المفيد في بعض الأحيان معرفة إصدار البروتوكول عند التنفيذ
__reduce__
.يمكن القيام بذلك عن طريق تنفيذ طريقة تدعى__reduce_ex__
بدلاً من__reduce__
.__reduce_ex__
, ، عندما يكون موجودًا ، يتم استدعاؤه في التفضيل__reduce__
(لا يزال بإمكانك تقديم__reduce__
للتوافق مع الوراء).ال__reduce_ex__
سيتم استدعاء الطريقة مع وسيطة عدد صحيح واحد ، نسخة البروتوكول.
على اليد الممسكة، يقول جويدو أن هذه منطقة يمكن تنظيفها.
نصائح أخرى
__reduce_ex__
ماذا يكون __reduce__
كان ينبغي أن يكون ولكن لم يصبح أبدا. __reduce_ex__
يعمل مثل __reduce__
ولكن تم تمرير بروتوكول المخلل.