我可以使用 object.__dict__[some_key]
或 getattr(object, some_key)
动态查找对象属性值。哪个更快或更好,为什么?
>>> class SomeObject:
... pass
...
>>> so = SomeObject()
>>> so.name = 'an_object'
>>> getattr(so,'name')
'an_object'
>>> so.__dict__['name']
'an_object'
最佳答案
你最好使用 getattr()
而不是直接转到 __dict__
结构。
不是因为它更快或更慢,而是因为官方 API 适用于所有 情况,包括那些不有 __dict__
的类(例如,当使用 __slots__
时),或者当一个对象实现了 __getattr__
时或 __getattribute__
钩子(Hook),或者当有问题的属性是 descriptor (例如 property
)或类属性。
如果您想知道任何一个 python 语句或技术是否比另一个更快,请使用 timeit
module 衡量差异:
>>> import timeit
>>> class Foo(object):
... pass
...
>>> foo = Foo()
>>> foo.bar = 'spam'
>>> timeit.timeit("getattr(foo, 'bar')", 'from __main__ import foo')
0.2125859260559082
>>> timeit.timeit("foo.__dict__['bar']", 'from __main__ import foo')
0.1328279972076416
你可以看到直接访问 __dict__
更快,但是 getattr()
做了更多的工作。
关于python - getattr() 与 __dict__ 查找,哪个更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14084897/