You are much better off using
getattr() instead of going directly to the
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
__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):
>>> foo = Foo()
>>> foo.bar = 'spam'
>>> timeit.timeit("getattr(foo, 'bar')", 'from __main__ import foo')
>>> timeit.timeit("foo.__dict__['bar']", 'from __main__ import foo')
You can see that directly accessing
__dict__ is faster, but
getattr() does a lot more work.