item.__dict__.iteritems() 的实际使用案例有哪些?

0 投票
1 回答
1071 浏览
提问于 2025-04-16 07:15

昨天我在这里看了一些问题,发现了 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 在你想查看字典中的键值对时非常有用,而不需要一次性把它们展开成一个元组列表。不过,在 这个特定的字典 上调用它时,它的用处就没那么大了。

撰写回答