下面的示例来自于Python 2.7上的REST数据库驱动程序。
在下面的`__setattr__`方法中,如果我使用注释掉的`getattr()`行,则将对象实例化性能从600 rps降至230.
在这种情况下为什么`getattr()`比`self.__dict__.get()`慢那么多?
在下面的`__setattr__`方法中,如果我使用注释掉的`getattr()`行,则将对象实例化性能从600 rps降至230.
在这种情况下为什么`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__
缓存到本地变量中 - 即使只有两个访问。(在__setattr__
的开始处使用dict_ = self.__dict__
) - jsbueno