以下の例は、Python 2.7のRESTデータベースドライバからのものです。以下__setattr__
方法でgetattr()がselfよりもずっと遅いのはなぜですか?__ dict __。get()?
は、私がコメントアウトgetattr()
ラインを使用している場合、それは230
に600のRPSからオブジェクトのインスタンス化のパフォーマンスが低下し、なぜこの場合self.__dict__.get()
よりgetattr()
そんなに遅いですか?要するに
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__'をキャッシュしてください(2回しかアクセスできない場合)。 ( '__setattr__'の始めに' dict_ = self .__ dict__') – jsbueno