item.__dict__.iteritems() 的实际使用案例有哪些?
昨天我在这里看了一些问题,发现了 item.__dict__.iteritems()
这个用法。老实说,我不知道这个东西是怎么用的、什么时候用、还有为什么要用,但我承认它看起来很漂亮,符合Python的风格。
那么,这个东西在“现实世界”中有什么实际的用法呢?
1 个回答
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
在你想查看字典中的键值对时非常有用,而不需要一次性把它们展开成一个元组列表。不过,在 这个特定的字典 上调用它时,它的用处就没那么大了。