Ниже приведен пример драйвера базы данных REST на Python 2.7.Почему getattr() намного медленнее, чем я .__ dict __. Get()?
В __setattr__
метод ниже, если использовать закомментирована getattr()
линию, это уменьшает объект производительности экземпляра от 600 до 230. RPS
Почему getattr()
так много медленнее, чем self.__dict__.get()
в этом случае?
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
На стороне примечания, если у вас есть такая разница в производительности, делайте кеш 'self .__ dict__' в локальной переменной - даже для двух доступа к нему. ('dict_ = self .__ dict__' в начале' __setattr__') – jsbueno