Aşağıdaki örnek, Python 2.7'deki REST veritabanı sürücüsünden alınmıştır. Ben dışarı yorumladı getattr()
hattını kullanıyorsanız aşağıda __setattr__
yöntemdeNeden getattr() öğesi, self .__ dict __. Get()?
, bu 230.
-600 rps'de nesne örnekleme performansı neden bu kadar yavaş bu durumda self.__dict__.get()
daha getattr()
olduğunu azaltır?
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
Bir yan notda, böyle bir performans farkı yaşıyorsanız, yerel bir değişkende 'self .__ dict__' önbelleğini yapın - hatta yalnızca iki erişim için. ('__setattr__' başlangıcında (dict_ = self .__ dict__') – jsbueno