import abjad
[docs]class HashCachingObject(object):
### CLASS VARIABLES ###
__slots__ = (
"_format",
"_hash",
)
### INITIALIZER ###
def __init__(self):
self._format = None
self._hash = None
[docs] def __str__(self):
return abjad.storage(self)
[docs] def __repr__(self):
return abjad.storage(self)
### SPECIAL METHODS ###
# @profile
[docs] def __eq__(self, expr):
if isinstance(expr, type(self)):
if format(self) == format(expr):
return True
return False
# @profile
# @profile
[docs] def __hash__(self):
if self._hash is None:
self._hash = hash((type(self), format(self)))
return self._hash