Skip to content

Instantly share code, notes, and snippets.

@xiyoulaoyuanjia
Forked from podhmo/get.py
Last active May 9, 2016 16:42
Show Gist options
  • Save xiyoulaoyuanjia/065a640925c265d4ffdef6916e74b617 to your computer and use it in GitHub Desktop.
Save xiyoulaoyuanjia/065a640925c265d4ffdef6916e74b617 to your computer and use it in GitHub Desktop.
# -*- coding:utf-8 -*-
from datetime import datetime
class Get(object):
"""
Lazy value calculate for object
"""
def __init__(self, getter):
self.getter = getter
def __get__(self, instance, type):
return self.getter()
class ObjectDict(dict):
"""
Object like dict, every dict[key] can visite by dict.key
If dict[key] is `Get`, calculate it's value.
"""
def __getattr__(self, name):
"""
if Object has attr name, Object.name will call it, else will call Object.__getattr__ function
"""
ret = self.__getitem__(name)
if hasattr(ret, '__get__'):
return ret.__get__(self, ObjectDict)
return ret
od = ObjectDict(now=Get(datetime.now))
print(od.now)
print(od.now)
# 2014-12-10 21:29:14.072379
# 2014-12-10 21:29:14.072392
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment