using self.class instead of hardcoded classname. memoized #hash method