2008-08-30 14 views
30

私のようにクラスAを作成する場合は、次のとおりです。私のインスタンス変数が__dict__にないのはなぜですか?

class B: 
    name = 'B' 

__dict__は空です。しかし、私はクラスBを作成する場合__dict__メンバーを点検

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

{'name': 'A'}

のように見えます。

nameB__dict__に表示されないのはなぜですか?

答えて

42

B.nameはインスタンス属性ではなくクラス属性です。 B.__dict__に表示されますが、b = B(); b.__dict__には表示されません。

インスタンス上の属性にアクセスすると、クラスdictがフォールバックになるため、区別があいまいになります。したがって、上記の例では、b.nameB.nameという値を与えます。

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

タイプAのオブジェクトインスタンスの属性を作成し、それゆえに見出すことができる:a.__dict__

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

クラスBの属性を作成し、属性は、代替的B.__dict__に見出すことができますタイプBのインスタンスbがある場合、クラスレベルの属性はb.__class__.__dict__

関連する問題