2012-02-29 19 views
6

यदि पाइथन डेटा मॉडल की मेरी समझ सही है, तो कक्षाओं और वर्ग के दोनों उदाहरणों ने __dict__ ऑब्जेक्ट्स को संबद्ध किया है जिसमें सभी विशेषताओं को शामिल किया गया है। हालांकि, मैं थोड़ा उलझन में हूं कि क्यों कुछ वर्ग उदाहरण, उदाहरण के लिए str के उदाहरण, __dict__ विशेषता नहीं है।पायथन: अंतर्निहित कक्षा उदाहरणों में __dict__ विशेषता क्यों नहीं है

अगर मैं एक कस्टम वर्ग बनाने के लिए:

class Foo: 
    def __init__(self): 
      self.firstname = "John" 
      self.lastname = "Smith" 

तो मैं कह रही द्वारा उदाहरण चर प्राप्त कर सकते हैं:

>>> f = Foo() 
>>> print(f.__dict__) 
{'lastname': 'Smith', 'firstname': 'John'} 

लेकिन अगर मैं अंतर्निहित का एक उदाहरण के साथ भी ऐसा ही करने की कोशिश str में, मैं मिलता है:

>>> s = "abc" 
>>> print(s.__dict__) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'str' object has no attribute '__dict__' 

तो, क्यों str के उदाहरण एक 0 नहीं हैविशेषता?

+2

इस पर विस्तार से बता दें अगर हर dict एक '__dict__' था, तब वहाँ होगा __dict __.__ dict__' भी होना चाहिए - रिकर्सन कितना गहरा होना चाहिए? –

उत्तर

10

सी में परिभाषित प्रकारों के उदाहरण डिफ़ॉल्ट रूप से __dict__ विशेषता नहीं है।

0

बस इस में जोड़ने के लिए:

आप इस का उपयोग करते हुए केवल __dict__ पढ़ एक के बराबर प्राप्त कर सकते हैं:

{s:getattr(x,s) for x in dir(x)} 
संबंधित मुद्दे