2011-09-26 26 views
7

मुझे पता है कि आप object.__setattr__ पर object से विरासत में नहीं मिली वस्तुओं पर कॉल नहीं कर सकते हैं, लेकिन क्या दोनों के बीच कुछ और अलग है? यदि यह मायने रखता है, तो मैं पाइथन 2.6 में काम कर रहा हूं।setattr() और ऑब्जेक्ट .__ setattr __() के बीच क्या अंतर है?

+0

'setattr' ऐसा कुछ है जिसे आप किसी अन्य ऑब्जेक्ट पर कॉल करते हैं,' __setattr __() 'कुछ ऐसा है जो आप अपनी ऑब्जेक्ट पर लागू करते हैं। –

+1

'setattr (obj, attr, value) 'कम से कम नए-शैली वर्गों के लिए' obj .__ setattr __ (attr, value) 'कहता है। – agf

उत्तर

12

setattr(instance, name, value)instance.__setattr__(name, value) के लिए वाक्य रचनात्मक चीनी है।

आप केवल एक वर्ग परिभाषा के अंदर object.__setattr__(...) कॉल करने के लिए की आवश्यकता होगी, और उसके बाद ही सीधे object उपवर्गीकरण अगर - अगर आप उदाहरण के लिए कुछ और, Spam उपवर्गीकरण रहे थे, तो आप या तो उपयोग करना चाहिए super() पदानुक्रम में अगले आइटम प्राप्त करने के लिए , या Spam.__setattr__(...) पर कॉल करें - इस तरह आप गायब व्यवहार का जोखिम नहीं उठाते हैं कि सुपर-क्लास ने उन्हें सीधे object पर छोड़कर परिभाषित किया है।

+2

धन्यवाद, यह बताता है। सुपरक्लास के __setattr__ को छोड़ने के सटीक उद्देश्य के लिए कोड शायद 'ऑब्जेक्ट .__ setattr__' का उपयोग कर रहा है। –

+0

_ "setattr (उदाहरण, नाम, मान) उदाहरण के लिए वाक्य रचनात्मक चीनी है .__ setattr __ (नाम, मान)" _ - क्या यह वास्तव में है? मुझे अस्पष्टता से याद है कि कुछ प्रकारों में '__getattr__' नहीं है लेकिन गुण प्राप्त करने के बावजूद उनके लिए काम करता है। क्या यह वही नहीं है? –

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