2009-09-04 12 views
0

クラスの誇張があります。各クラスは、すべてが同じ変数名を持つクラス変数(具体的には辞書です)を定義します。私は、非常にルートクラスが、子クラスのインスタンスを与えられたこれらの変数(つまり、すべての辞書が一緒に結合されている)に何らかの形でアクセスできるようにしたいと思います。私はそうする方法を見つけることができないようです。私が何を試みても、私はいつも、子クラスを与えられた直接の親クラスを取り出すことができないという事実に固執しています。これはどのように達成できますか?クラスの階層のすべての属性を集計する方法は?

答えて

1

新しいスタイルのクラス(objectなどの組み込みタイプが「最も深い祖先」)を使用している場合は、__mro__がお探しのものです。例えば、与えられた:今

>>> class Root(object): 
... d = {'za': 23} 
... 
>>> class Trunk(Root): 
... d = {'ki': 45} 
... 
>>> class Branch(Root): 
... d = {'fu': 67} 
... 
>>> class Leaf(Trunk, Branch): 
... d = {'po': 89} 

>>> def getem(x): 
... d = {} 
... for x in x.__class__.__mro__: 
...  d.update(x.__dict__.get('d',())) 
... return d 
... 
>>> x = Leaf() 
>>> getem(x) 
{'za': 23, 'ki': 45, 'po': 89, 'fu': 67} 
+0

パーフェクト!まさに私が探していたもの。ありがとうございました。 –

関連する問題