在哪个“实际使用”案例项.__ dict __。iteritems()被使用?

时间:2010-11-18 09:15:03

标签: python

昨天我在这里读了一些关于SO的问题,我开始了解item.__dict__.iteritems()。 我必须承认,我不知道如何,何时或为何使用它,我也承认它看起来很漂亮,pythonic。

那么,它的一些“现实世界”用途是什么?

1 个答案:

答案 0 :(得分: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就非常有用。当调用这个特定的字典时,它恰好不是非常有用。