El siguiente ejemplo es de un controlador de base de datos REST en Python 2.7.¿Por qué getattr() es mucho más lento que self .__ dict __. Get()?
En el método __setattr__
a continuación, si uso el comentado getattr()
línea, se reduce el rendimiento de instancias de objetos a partir de 600 rps a 230.
¿Por qué es tan getattr()
mucho más lento que self.__dict__.get()
en este caso?
class Element(object):
def __init__(self, client):
self._client = client
self._data = {}
self._initialized = True
def __setattr__(self, key, value):
#_initialized = getattr(self, "_initialized", False)
_initialized = self.__dict__.get("_initialized", False)
if key in self.__dict__ or _initialized is False:
# set the attribute normally
object.__setattr__(self, key, value)
else:
# set the attribute as a data property
self._data[key] = value
Como nota al margen, si tiene una diferencia en el rendimiento, haga una caché 'self .__ dict__' en una variable local, incluso para solo dos accesos. ('dict_ = self .__ dict__' al comienzo de' __setattr__') – jsbueno