2012-03-03 28 views
0

クラスの属性をクラス名とインスタンスで取得する普遍的な方法はありますか?クラスの属性を取得

class A: 
    def __init__(self): 
     self.prop = 1 

a = A() 

for attr, value in a.__dict__.items(): 
    print(attr, value) # prop, 1 

class A: 
    def __init__(self): 
     self.prop = 1 

for attr, value in A.__dict__.items(): 
    print(attr, value) 
    #__dict__, __doc__, __init__, __module__, __weakref__ 

最後の例では、結果が異なる理由dir attibutesを返すのはなぜ?

+0

を使用http://docs.python.org/library/stdtypes.html#special-attributes

がオブジェクトから取得するにはを参照してください? – grifaton

+0

>クラス名とインスタンスごとにクラスの属性を取得する普遍的な方法はありますか? <私はこれを理解していません – warvariuc

+0

2番目の例でクラス属性を取得する方法を指します(私は 'prop、1'を取得したいと思います)? – Opsa

答えて

1

__dict__, __doc__, __module__, ...実際には作成していなくても、クラスには実際に存在します。彼らは「組み込み」です。

したがって、dirがあなたに表示されるのは正常です。

__dict__インスタンスの属性には、インスタンスの属性が格納されます。

class A: 
    def __init__(self): 
     self.prop = 1 

a = A() 
for attr, value in a.__dict__.items(): 
    print(attr, value) 

これはインスタンス属性を示しています。 propself.prop = 1

for attr, value in A.__dict__.items(): 

そして、これは、クラス属性を取得します - そして、ちょうど1インスタンスの属性があります。 propがインスタンスに追加されたので、ここにはありません。

クラス属性、ベースクラスの属性を含むすべての属性が、あなたはそれはあなたを与えるために何を期待しinspect.getmembers

+0

Thxを読んでください。ただし、インスタンスごとに 'class'属性を取得する方法を教えてください。 – Opsa

関連する問題