2009-04-08 35 views
27

मैं ओवरराइड करने के लिए प्लस __add__ विधि के बारे में पता है, लेकिन जब मैं का उपयोग करने वाले ओवरराइड करने के लिए + =, मैं दो समस्याओं में से एक के साथ समाप्त:क्या पायथन में + = अधिभारित करने का कोई तरीका है?

(1) यदि __add__ mutates स्वयं

z = x + y 
, तो

एक्स को म्यूटेट करेगा जब मैं वास्तव में एक्स को उत्परिवर्तित नहीं करना चाहता हूं।

(2) __add__ एक नई वस्तु है, तो

tmp = z 
z += x 
z += y 
tmp += w 
return z 

बिना डब्ल्यू z += x के बाद अलग-अलग वस्तुओं के लिए z और tmp बिंदु के बाद से क्रियान्वित किया जाता है कुछ वापस आ जाएगी लौटाता है यदि।

मैं कुछ प्रकार के .append() विधि बना सकता हूं, लेकिन यदि संभव हो तो मैं += को अधिभारित करना पसंद करूंगा।

+10

प्रोग्रामर जो आरटीएफएम एक लुप्तप्राय प्रजाति हैं। – tzot

+2

@tzot एक तरह से, आप F'ing M. को देख रहे हैं ;-) –

+0

क्या आप यह मानते हैं कि जोश पायथन के मैन्युअल लेखकों में से एक है? क्षमा करें, मुझे समझ में नहीं आता कि आपका क्या मतलब है, @ बॉबस्टिन-विस्बीबोन। – tzot

उत्तर

50

हां। बस ऑब्जेक्ट की __iadd__ विधि को ओवरराइड करें, जो add के समान पैरामीटर लेता है। आप अधिक जानकारी here पा सकते हैं।

+1

+1: प्रलेखन उद्धरण :-) –

संबंधित मुद्दे

 संबंधित मुद्दे