2008-08-30 10 views
30

यदि मैं निम्नानुसार A बनाता हूं:मेरा उदाहरण चर __dict__ में क्यों नहीं है?

class A: 
    def __init__(self): 
     self.name = 'A' 

__dict__ सदस्य का निरीक्षण {'name': 'A'}

जैसा दिखता है यदि मैं एक वर्ग B:

class B: 
    name = 'B' 

__dict__ खाली है।

दोनों के बीच क्या अंतर है, और BB__dict__ में क्यों नहीं दिखता है?

उत्तर

42

B.name एक क्लास विशेषता है, उदाहरण की विशेषता नहीं है। यह B.__dict__ में दिखाई देता है, लेकिन b = B(); b.__dict__ में नहीं।

भेद कुछ हद तक अस्पष्ट है क्योंकि जब आप किसी उदाहरण पर किसी विशेषता को एक्सेस करते हैं, तो कक्षा का आदेश एक फॉलबैक होता है। तो उपर्युक्त उदाहरण में, b.name आपको B.name का मान देगा।

11
class A: 
    def _ _init_ _(self): 
     self.name = 'A' 
a = A() 

ग्रुप ए की वस्तु उदाहरण एक पर एक विशेषता बनाता है और यह इसलिए में पाया जा सकता: a.__dict__

class B: 
    name = 'B' 
b = B() 

वर्ग बी पर एक विशेषता बनाता है और विशेषता वैकल्पिक रूप से B.__dict__ में पाया जा सकता यदि आपके पास बी प्रकार का उदाहरण बी है, तो आप b.__class__.__dict__

में कक्षा स्तर विशेषताओं को देख सकते हैं
संबंधित मुद्दे