Created
December 26, 2017 03:23
-
-
Save geekKeen/a0d6151e11585e9b08a98b9d4601227d to your computer and use it in GitHub Desktop.
Object attr
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class MemoizedSlots(object): | |
def _fallback_getattr(self, key): | |
raise AttributeError(key) | |
def __getattr__(self, key): | |
if key.startswith('_memoized'): | |
raise AttributeError(key) | |
elif hasattr(self, '_memoized_attr_%s' % key): | |
value = getattr(self, '_memoized_attr_%s' % key)() | |
setattr(self, key, value) | |
return value | |
elif hasattr(self, '_memoized_method_%s' % key): | |
fn = getattr(self, '_memoized_method_%s' % key) | |
def onshot(*args, **kwargs): | |
result = fn(*args, *kwargs) | |
memo = lambda *args, **kwargs: result | |
memo.__doc__ = fn.__doc__ | |
memo.__name__ = fn.__name__ | |
setattr(self, key, memo) | |
return result | |
onshot.__doc__ = fn.__doc__ | |
return onshot | |
else: | |
self._fallback_getattr(key) | |
m = lambad *args, **kwargs: return | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
memorized_solts.py
Q:getattr, getattr 的作用?
A:
4.setattr/ setattr: setattr(self, 'foo', 1) == self.foo=1, setattr 会在instance attribute dict 添加, 如果在__setattr__ 中做self.name='foo', 将会出现递归