2010-07-30 15 views
10

मैं जानना चाहता हूं कि कस्टम प्रकार के उदाहरण के लिए कोई नया गुण क्यों बना सकता है ("नया" का अर्थ है "क्लास बॉडी में पहले परिभाषित नहीं किया गया"), लेकिन यह एक के लिए ऐसा करने में सक्षम नहीं है अंतर्निहित प्रकार, जैसे object स्वयं।क्यों पाइथन में कस्टम प्रकार विज्ञापन-गुणों को स्वीकार करते हैं (और अंतर्निहित नहीं हैं)?

एक कोड उदाहरण:

>>> class SomeClass(object): 
...  pass 
... 
>>> sc = SomeClass() 
>>> sc.name = "AAA" 
>>> sc.name 
'AAA' 
>>> obj = object() 
>>> obj.name = "BBB" 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
AttributeError: 'object' object has no attribute 'name' 

उत्तर

6

कुछ वस्तुएं (जो एक शब्दकोश है कि सभी कस्टम 'नव परिभाषित' विशेषताओं का संग्रह करता है) __dict__ विशेषता नहीं है। आप __slots__ चर का उपयोग कर एक ही व्यवहार का अनुकरण कर सकते हैं (python reference देखें)। जब आप __dict__ के साथ कक्षा को उप-वर्गीकृत कर रहे हैं, तो __slots__ चर का कोई प्रभाव नहीं पड़ता है। और जैसा कि आप हमेशा नए शैली वर्गों के लिए ऑब्जेक्ट उप-वर्गीकरण कर रहे हैं, ऑब्जेक्ट में __dict__ नहीं होना चाहिए, क्योंकि इससे __slots__ का उपयोग करना असंभव हो जाएगा। __slots__ के बिना कक्षाएं कम स्मृति लेती हैं और शायद थोड़ा तेज़ होती हैं।

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