https://docs.python.org/3.3/library/functions.html से #वस्तु
object
में कोई__dict__
नहीं है, इसलिए आपobject
वर्ग के उदाहरण के लिए मनमानी विशेषताएँ निर्दिष्ट नहीं कर सकते।
क्यों "object
में __dict__
" नहीं है? इससे मेरा काम बनता है
>>> object.__dict__
mappingproxy({'__repr__': <slot wrapper '__repr__' of 'object' objects>, '__hash__': <slot wrapper '__hash__' of 'object' objects>, '__subclasshook__': <method '__subclasshook__' of 'object' objects>, '__ne__': <slot wrapper '__ne__' of 'object' objects>, '__format__': <method '__format__' of 'object' objects>, '__new__': <built-in method __new__ of type object at 0xa3dc20>, '__doc__': 'The most base type', '__class__': <attribute '__class__' of 'object' objects>, '__dir__': <method '__dir__' of 'object' objects>, '__delattr__': <slot wrapper '__delattr__' of 'object' objects>, '__getattribute__': <slot wrapper '__getattribute__' of 'object' objects>, '__le__': <slot wrapper '__le__' of 'object' objects>, '__init__': <slot wrapper '__init__' of 'object' objects>, '__gt__': <slot wrapper '__gt__' of 'object' objects>, '__ge__': <slot wrapper '__ge__' of 'object' objects>, '__eq__': <slot wrapper '__eq__' of 'object' objects>, '__reduce__': <method '__reduce__' of 'object' objects>, '__lt__': <slot wrapper '__lt__' of 'object' objects>, '__str__': <slot wrapper '__str__' of 'object' objects>, '__reduce_ex__': <method '__reduce_ex__' of 'object' objects>, '__sizeof__': <method '__sizeof__' of 'object' objects>, '__setattr__': <slot wrapper '__setattr__' of 'object' objects>})
क्यों "आप object
वर्ग के उदाहरण के लिए मनमानी विशेषताएँ निर्दिष्ट नहीं कर सकते"?
1 उत्तर
आप उदाहरणों पर विशेषता के साथ __dict__
को प्रकार पर भ्रमित कर रहे हैं। object()
उदाहरण में कोई __dict__
विशेषता नहीं है:
>>> object().__dict__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'object' object has no attribute '__dict__'
ध्यान दें कि कस्टम पायथन वर्ग उदाहरणों की __dict__
विशेषता एक descriptor< है /em>; उदाहरण में ही विशेषता नहीं है, यह वह वर्ग है जो इसे प्रदान करता है (इसलिए type(instance).__dict__['__dict__'].__get__(instance)
वापस कर दिया जाता है)। object.__dict__
मौजूद हो सकता है, लेकिन object.__dict__['__dict__']
नहीं।
object()
इंस्टेंस विशेषताओं का समर्थन नहीं करता क्योंकि यह सभी कस्टम पायथन वर्गों के लिए आधार है, जिन्हें स्लॉट को परिभाषित करते समय __dict__
विशेषता न होने का समर्थन करें।
__dict__
विशेषता होती है। तो object
के उदाहरण में __dict__
विशेषता क्यों नहीं है?
__dict__
विशेषता के बिना बिना कस्टम क्लास इंस्टेंस नहीं हो सकते, जैसे कि उन वर्गों के लिए जो इसके बजाय स्लॉट हैं।
__dict__
मैपिंग की आवश्यकता है। इस प्रकार मनमानी विशेषताएँ काम करती हैं।
__dict__
में कुंजियाँ, और वर्ग पदानुक्रम पर विशेषताएँ। वर्ग पदानुक्रम पर गुण वर्णनकर्ता हो सकते हैं, जो तब उदाहरण के लिए बाध्य हो जाते हैं। __dict__
को ऐसे डिस्क्रिप्टर के रूप में लागू किया जाता है, इसलिए कक्षा इसकी आपूर्ति करती है। तो हाँ, क्योंकि कक्षा (या कक्षा के माता-पिता) में एक __dict__
विशेषता होती है जो एक वर्णनकर्ता होती है, यह विशेषता सभी उदाहरणों पर काम करती है। बिल्कुल तरीकों की तरह।
type
पर भी लागू होता है; यह कक्षाओं के लिए विवरणकों की आपूर्ति कर सकता है (object
सहित)। object.__dict__
वास्तव में सीधे object
पर एक विशेषता नहीं है, यह एक विवरणक है जो type
प्रदान करता है; object.__dict__
वास्तव में type.__dict__['__dict__'].__get__(object)
है। हालांकि कोई object.__dict__['__dict__']
नहीं है।
संबंधित सवाल
जुड़े हुए प्रश्न
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।
object().__dict__
को देखें।object
के इंस्टेंस की बात कर रहा है, ऑब्जेक्ट टाइप का नहीं।object
के पास__dict__
" नहीं है "object
के उदाहरण में__dict__
" नहीं है। तो मैंने इसे गलत कैसे समझा?