getattr() versus dict lookup, which is faster?

前端 未结 1 1805
臣服心动
臣服心动 2020-12-19 00:44

A somewhat noobish, best practice question. I dynamically look up object attribute values using object.__dict__[some_key] as a matter of habit. Now I am wonderi

相关标签:
1条回答
  • 2020-12-19 01:01

    You are much better off using getattr() instead of going directly to the __dict__ structure.

    Not because it's faster or slower, but because the official API works in all circumstances, including for classes that do not have a __dict__ (when using __slots__ for example), or when an object implements the __getattr__ or __getattribute__ hooks, or when the attribute in question is a descriptor (such as a property), or a class attribute.

    If you want to know if any one python statement or technique is faster than another, use the timeit module to measure the difference:

    >>> 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
    

    You can see that directly accessing __dict__ is faster, but getattr() does a lot more work.

    0 讨论(0)
提交回复
热议问题