मैंने पायथन (एक अभ्यास के रूप में) में वैक्टर का प्रतिनिधित्व करने के लिए एक कक्षा लिखी है और मुझे अंतर्निहित ऑपरेटरों को विस्तारित करने में समस्याएं आ रही हैं।उपयोगकर्ता परिभाषित __mul__ विधि कम्यूटिव नहीं है
मैंने वेक्टर वर्ग के लिए __mul__
विधि परिभाषित की। समस्या यह है कि x * y
अभिव्यक्ति में दुभाषिया __mul__
x की विधि को कॉल करता है, न कि y।
तो vector(1, 2, 3) * 2
एक वेक्टर < 2, 4, 6> देता है जैसा कि इसे करना चाहिए; लेकिन 2 * vector(1, 2, 3)
एक टाइप एरर बनाता है क्योंकि अंतर्निहित int कक्षा मेरे उपयोगकर्ता द्वारा परिभाषित वैक्टर द्वारा गुणा का समर्थन नहीं करती है।
मैं बस एक नया गुणा समारोह
def multiply(a, b):
try:
return a * b
except TypeError:
return b * a
लिख कर इस समस्या को हल कर सकता है, लेकिन यह हर कार्य है कि मैं अपने उपयोगकर्ता परिभाषित वर्गों के साथ उपयोग करना चाहते हैं फिर से परिभाषित करने की आवश्यकता होगी।
क्या अंतर्निहित फ़ंक्शन इसे सही तरीके से संभालने का कोई तरीका है?
लिए देख रहे हैं कैसे अजगर आह्वान करने के लिए 'फू .__ rmul__' और नहीं पता है' अन्य वस्तु की __mul__'? –
यह बाएं हाथ की '__mul__' का उपयोग करने का प्रयास करता है, और यदि उसे यह नहीं मिल रहा है, तो यह दाईं ओर' __rmul__' की तलाश करता है। –
@pst, पायथन पहले '__mul__' कहते हैं, लेकिन यदि यह या तो मौजूद नहीं है या यदि यह 'लागू नहीं किया गया' वापस लौटाता है तो पाइथन अन्य ऑब्जेक्ट के' __rmul__' को कॉल करता है। (ध्यान दें कि यदि '__mul__' निष्पादन बढ़ाता है, तो' __rmul__' __not__ कहा जाता है। –