2010-11-18 6 views

答えて

2

正直なところ、イントロスペクションを除いて、実際の使用例はほとんどありません。ほとんどの場合、inspect.getmembersはより良いでしょう(ジェネレータではありませんが、あなたのクラスに十分な属性があれば問題は本当に少なくなります)

違いはinspect.gemembersはクラスとインスタンスの両方を取得しますインスタンスの属性のみがinstance.__dict__に存在するのに対し、継承チェーンのすべての方法で行います。一般的に

>>> class A(object): 
... a = 'a' 
... 
>>> a = A() 
>>> a.a 
'a' 
>>> a.__dict__ 
{} 
>>> a.b = 'b' 
>>> a.__dict__ 
{'b': 'b'} 
>>> import inspect 
>>> inspect.getmembers(a) 
[('__class__', <class '__main__.A'>), 
('__delattr__', <method-wrapper '__delattr__' of A object at 0xb774da8c>), 
('__dict__', {'b': 'b'}), ('__doc__', None), 
('__format__', <built-in method __format__ of A object at 0xb774da8c>), 
# Snipped for brevity 
# .... 
('__subclasshook__', <built-in method __subclasshook__ of type object at 0x87b172c>), 
('__weakref__', None), ('a', 'a'), ('b', 'b')] 

>>> list(a.__dict__.iteritems()) 
[('b', 'b')] 

iteritemsはあなたがキーを見てみたいかなり便利いつでもある、一度にすべてのタプルのリストにそれらを拡大することなく、辞書内の値エントリ。この特定の辞書の で呼び出されたとき、それは信じられないほど役に立ちません。

+0

私は 'inspect'について知らなかった。 :) –

関連する問題