L'esempio seguente proviene da un driver di database REST su Python 2.7.Perché getattr() è molto più lento di self .__ dict __. Get()?
Nel metodo __setattr__
seguito, se uso il commentata getattr()
linea, riduce le prestazioni istanza dell'oggetto da 600 a 230. RPS
Perché getattr()
molto più lento rispetto self.__dict__.get()
in questo 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
Nota a margine, se si riscontra una tale differenza di prestazioni, memorizzare nella cache 'self .__ dict__' in una variabile locale, anche solo per due accessi. ('dict_ = self .__ dict__' all'inizio di' __setattr__') – jsbueno